我正在尝试使用以下代码将字典值列表提取到文件中:
import csv
def function(file, output, deli = ','):
dictionary = dict()
with open(file, 'r') as source, open(output, 'w') as outp:
data = csv.reader(source)
line0 = next(data)
i = 0
for element in line0:
dictionary[i] = element
i += 1
my_writer = csv.writer(outp)
for element in dictionary.values():
print(element)
my_writer.writerow(element)
if __name__ == '__main__':
from sys import argv
if len(argv) == 2:
function(argv[1])
elif len(argv) == 3:
function(argv[1], argv[2])
elif len(argv) == 4:
function(argv[1], argv[2], argv[3])
print("ok")
要在shell上运行此代码,我使用以下命令: python function.py输入输出
但是,尝试使用csv文件: alpha,beta,gamma,delta
我得到以下结果:
a,l,p,h,a
,b,e,t,a
,g,a,m,m,a
,d,e,l,t,a
我尝试将分隔符更改为'',我用空格而不是逗号得到相同的结果。
我错过了什么吗?
答案 0 :(得分:1)
问题出在
行for element in dictionary.values():
print(element)
my_writer.writerow(element)
从docs参数到writerow
应该是一个对象列表。在您的情况下,参数是一个字符串(可迭代)。
所以你实际做的是my_writer.writerow("alpha")
,它写成a,l,p,h,a
。
你应该只做
my_writer.writerow(element.values())
此外,由于您的CSV字符串为alpha, beta, gamma
,因此您将获得领先的逗号。因此,当拆分发生时,元素为['aplha',' beta',' gamma',]
。您可以使用strip()
删除它们
答案 1 :(得分:0)
您正在遍历行中的字符而不是实际的元素
with open(file_, 'r') as source, open(output, 'w') as outp:
data = csv.reader(source, delimiter=deli)
#line0 = next(data)
i = 0
for element in data:
dictionary[i] = element
i += 1
在这种情况下,如果您覆盖file
,instead PEP 008 recommends that you add an underscore to the end of you variable name,则不会覆盖内置插件也是一种好习惯。