我有一個數據轉儲是「搞砸」的CSV。 (大約100個文件,每個文件大約有1000行實際CSV數據。)
轉儲除CSV外還有一些其他文本。如何以編程方式單獨提取CSV部分?在Python中識別csv
作爲一個例子,數據文件看起來像這樣的事情
Session:1
Data collection date: 09-09-2016
Related questions:
Question 1: parta, partb, partc,
Question 2: parta, partb, partc
"field1","field2","field3","field4"
"data11","data12","data13","data14"
"data21","data22","data23","data24"
"data31","data32","data33","data34"
"data41","data42","data43","data44"
"data51","data52","data53","data54"
我需要提取CSV一部分。
注意事項,
開頭的文字不限於4-5行。
額外的文本不只是在
我看到this post的文件的開頭是建議使用re.split和/或csv.Sniffer, 但是我的嘗試是不是卓有成效。
with open("untitled.csv") as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
print(dialect.__dict__)
csvstarts = False
csvdump = []
for ln in csvfile.readlines():
toks = re.split(r'[,]', ln)
print(toks)
if toks[0] == '"field1"' and not csvstarts: # identify by the header line
csvstarts = True
continue
if csvstarts:
if toks[0] == '"field1"': # identify the start of subsequent csv data
csvstarts = False
continue
csvdump.append(ln) # record the current line
print(csvdump)
現在,只有存在一堆數據時,我才能夠準確識別csv行。
有什麼更好的我可以做嗎?
什麼分開行與數據和行與文本呢?如果文本行以「? – Aidenhjj
」開始,那麼這就是問題出在哪裏,除非您將空白行視爲分隔符,否則沒有任何東西可以將csv數據與文本分開。 – okkhoy