3

我有以下格式的 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 脚本。

4

8 回答 8

16

string 方法从右侧而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']
于 2009-08-13T14:32:41.007 回答
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]
于 2009-08-13T14:36:26.247 回答
1

你总是可以用正则表达式做一些事情,比如(perl regex)

#!/usr/bin/perl

use IO::File;

if (my $file = new IO::File("test.csv"))
{
    foreach my $line (<$file>) {
    $line =~ m/^(.*),(.*?),(.*?),(.*?)$/;
    print "[$1][$2][$3][$4]\n";
    }
} else {
    print "Unable to open test.csv\n";
}

(第一个是贪婪搜索,最后 3 个不是) 编辑:发布完整代码,而不仅仅是正则表达式

于 2009-08-13T14:30:56.360 回答
1

先反转字符串,然后处理它。

tmp = tmp[::-1]

于 2009-08-13T14:31:05.190 回答
1

从您提供的示例中,看起来“列”是固定大小的。首先(带逗号的那个)是 16 个字符长,那么为什么不尝试逐行读取文件,然后为每一行读取前 16 个字符(作为第一列的值),其余的相应地读取?在您拥有每个值之后,您可以进一步解析它(修剪空格,等等......)。

于 2009-08-13T14:33:15.623 回答
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。

于 2009-08-13T14:35:21.910 回答
0

如果您总是期望相同数量的列,并且只有第一列可以包含逗号,那么只需读取任何内容并在开头连接多余的列。

问题是界面不明确,您可以尝试规避这一点,但更好的解决方案是尝试修复界面(这通常比创建多个补丁更难......)。

于 2009-08-13T14:36:01.237 回答
0

我同意啤酒先生。那是一个格式错误的 csv 文件。您最好的选择是找到其他分隔符或停止重载逗号或引用/转义非字段分隔逗号

于 2009-08-13T14:36:03.563 回答