如何在Python中解析单行CSV字符串而不用csv.reader迭代器?
我有一个CSV文件,需要对它进行重新排列和重新编码。我想在每一行被解析和分割之前,先运行
line = line.decode('windows-1250').encode('utf-8')
。或者,我也可以自己逐行处理,先进行重新编码,然后用CSV库的单行解析功能,但还是用同一个读取器。
有没有什么好的方法可以做到这一点呢?
3 个回答
2
可以这样遍历文件中的每一行:
with open('path/to/my/file.csv', 'r') as f:
for line in f:
puts line # here You can convert encoding and save lines
但是如果你想要转换整个文件的编码,可以这样调用:
$ iconv -f Windows-1250 -t UTF8 < file.csv > file.csv
补充:那么问题出在哪里呢?
with open('path/to/my/file.csv', 'r') as f:
for line in f:
line = line.decode('windows-1250').encode('utf-8')
elements = line.split(",")
2
在csv文档的最底部,有一组类(UnicodeReader和UnicodeWriter),它们为csv文件提供了对Unicode的支持:
rfile = open('input.csv')
wfile = open('output.csv','w')
csv_reader = UnicodeReader(rfile,encoding='windows-1250')
csv_writer = UnicodeWriter(wfile,encoding='utf-8')
for c in csv_reader:
# process Unicode lines
csv_writer.writerow(c)
rfile.close()
wfile.close()
2
谢谢大家的回答。那个关于包装的回答让我有了一个想法:
def reencode(file):
for line in file:
yield line.decode('windows-1250').encode('utf-8')
csv_writer = csv.writer(open(outfilepath,'w'), delimiter=',',quotechar='"', quoting=csv.QUOTE_MINIMAL)
csv_reader = csv.reader(reencode(open(filepath)), delimiter=";",quotechar='"')
for c in csv_reader:
l = # rearange columns here
csv_writer.writerow(l)
这正是我想要的,在csv_reader解析一行之前重新编码它。