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