2017-06-13 150 views
0

我试图将信息列表写入python中的.csv文件。到目前为止,我只能打印标题。我想从现有的.csv文件中抓取2列,用我的数据写入新的.csv文件。到目前为止,我有如何在Python中将数据列表写入.csv文件?

def get_id_size(): 
    read_file = pandas.read_csv('poem_info.csv') 
    poemid = (read_file[['poemname']]) 
    poemsize = (read_file[['poemsize']]) 
    return (poemid, poemsize) #this is the columns i want in my new.csv file 

    with open('poem_data.csv', 'w') as outfile: 
     # write header 
     outfile.write('poemid,poemsize,cli,ari\n') 

我的新数据是

 cli = calculate_cli 
     ari = calculate_ari 

所以我的问题是:如何分配poemid,poemsize,CLI和ARI到CSV文件?我很新的蟒蛇,我不能找出语法这样做

+0

你真的需要'pandas'?似乎你并没有像内置'csv'模块(特别是在Py3上,它对Unicode友好)无法处理的东西那样使用它。 – ShadowRanger

+0

我并不特别需要它,但我认为这将是更快,如果我使用 – emptybladder

+0

是'calculate_cli()大熊猫'并读入现有的CSV文件'calculate_ari()'使用'从和poemid''poemsize'值? – nbeuchat

回答

0

大熊猫是不是必需的,但它会简化你的生活你可以做以下(去除功能get_id_size()完全。 ):

import pandas as pd 

df = pd.read_csv('poem_info.csv') 

# Change the column name of poemname 
df.rename(columns={'poemname':'poemid'}, inplace=True) 

# Add the new columns 
df['cli'] = calculate_cli() 
df['ari'] = calculate_ari() 

# Export 
df.to_csv('poem_data.csv',header=True,index=False) 
+0

这对我有效!谢谢! – emptybladder

0

嘛,我不是一个pandas大师,但你并不真的需要它在这里:

import csv 

with open('poem.csv', newline='') as inf, 
    open('poem_data.csv', 'w', newline='') as outf: 
    csvout = csv.writer(outf) 
    csvout.writerow(['poemid', 'poemsize', 'cli', 'ari']) 
    for (poemid, size, *_), c, a in zip(csv.reader(inf), cli, ari): 
     csvout.writerow([poemid, size, c, a]) 

从输入文件读取(忽略前两个字段的所有字段;如果字段实际上是索引1和3,则可以使用for (_, poemid, _, size, *_), c, a in zip(...):),将它们与您的计算值配对,然后写出它们。我确信pandas有更好的方法,但这根本不需要第三方模块,因此在某些情况下可能更可取。

要将它分解为函数,您需要在函数外部打开文件或者对结果进行校验(因此with块在完成之前不会切断对文件的访问,例如:

def get_id_size(): 
    with open('poem.csv', newline='') as inf: 
     return [(poemid, size) for poemid, size, *_ in csv.reader(inf)] 

cli = calculate_cli() 
ari = calculate_ari() 

with open('poem_data.csv', 'w', newline='') as outfile: 
    csvout = csv.writer(outfile) 
    # write header 
    csvout.writerow(['poemid', 'poemsize', 'cli', 'ari']) 
    for (poemid, size), c, a in zip(get_id_size(), cli, ari): 
     csvout.writerow([poemid, size, c, a]) 

注:这是PY 3码;将所需的Py2 csv模块的变化

+0

谢谢!我在PY3运行,但是当我执行你的代码,我得到一个 “csvout.writerow([ 'poemid', 'poemsize', '命令行', 'ARI']) io.UnsupportedOperation:不可写” 错误 – emptybladder

+0

@emptybladder:是的,错字。打开写入时忘了通过模式。已经修复了(刚刚添加''w''作为第二个参数给''open' for'outf'。对不起,混淆。 – ShadowRanger

+0

(至少在Windows上)你应该打开'csv.writer'文件为二进制。'open('poem_data编辑:哦,嗯,也许这只是在py2 –

相关问题