逆向解析CSV文件
我有一些CSV文件,格式如下:
CSV FILE
"a" , "b" , "c" , "d"
hello, world , 1 , 2 , 3
1,2,3,4,5,6,7 , 2 , 456 , 87
h,1231232,3 , 3 , 45 , 44
问题是,第一个字段里面有逗号“,”。我无法控制文件的生成,因为我收到的就是这个格式。有没有办法从CSV文件的末尾开始读取,也就是从行的最后到最前面?
如果有人能给我一些指导,我不介意写一个小的Python脚本来实现这个功能。
8 个回答
1
这不是一个CSV文件,逗号分隔就是这个意思。
你怎么能确定这不是:
CSV FILE
"a" , "b" , "c" , "d"
hello , world , 1 , 2 , 3
1 , 2 , 3 , 4 , 5,6,7,2,456,87
h , 1231232 , 3 , 3 , 45,44
如果文件像你说的那样,那么第一个组应该用引号括起来,看起来字段名称很奇怪,包含逗号的字段却没有。
我不太喜欢在错误源头之外去修复问题,我会要求数据生成者提供正确的CSV格式,如果他们声称这是CSV的话。
4
我不太明白你为什么想要反向读取每一行,但你可以这样做:
import csv
file = open("mycsvfile.csv")
reversedLines = [line[::-1] for line in file]
file.close()
reader = csv.reader(reversedLines)
for backwardRow in reader:
lastField = backwardRow[0][::-1]
secondField = backwardRow[1][::-1]
16
rsplit
这个字符串方法是从右边开始分割字符串,而不是从左边分割,所以这可能正是你想要的(它可以接收一个参数,指定最多分割的次数):
line = "hello, world , 1 , 2 , 3"
parts = line.rsplit(",", 3)
print parts # prints ['hello, world ', ' 1 ', ' 2 ', ' 3']
如果你想去掉分割后每个项目开头和结尾的空格,可以使用strip
方法,并结合列表推导式来实现。
parts = [s.strip() for s in parts]
print parts # prints ['hello, world', '1', '2', '3']