逆向解析CSV文件

3 投票
8 回答
2464 浏览
提问于 2025-04-15 13:34

我有一些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']

撰写回答