我有以下格式的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脚本来这样做,如果我在正确的方向引导。
我有以下格式的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脚本来这样做,如果我在正确的方向引导。
的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']
是伟大的工作,感谢捆绑 – dassouki 2009-08-13 16:23:31
你总是可以做一些与正则表达式的,像(Perl的正则表达式)
#!/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都没有) 编辑:发布完整的代码,而不是仅仅的正则表达式
http://xkcd.com/208/ – 2009-08-13 14:32:25
先反转字符串,然后处理它。
TMP = TMP [:: - 1]
从您提供的示例中,它看起来像“列”是固定大小。首先(带逗号的)长度为16个字符,为什么不尝试逐行读取文件,然后每行读取前16个字符(作为第一列的值),其余部分相应地?在获得每个值之后,您可以进一步解析它(修剪空格,等等......)。
我只是格式化它,为你的观赏乐趣 – dassouki 2009-08-13 14:35:28
那不是一个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文件。最好的办法是寻找其他的分隔符或停止超载逗号或报价/逃避非现场逗号分隔
我不完全理解你为什么要读反向每一行,但你可以这样做:
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]
这很好:D谢谢 – dassouki 2009-08-13 16:24:03
也许他使它看起来像固定长度字段为清楚? 如果第一个字段包含分隔符,没有任何类型的引号字符是不是一个很好的格式化的CSV。 – davewasthere 2009-08-13 14:32:43
这不是CSV。所以,你不能使用任何CSV解析技术。这是一些其他的格式,恰好有一些逗号,但绝对不是在任何意义上的单词的CSV。请停止将其称为CSV。称之为“类CSV”或“随机逗号值”。 – 2009-08-13 19:45:00