![](/img/trans.png)
[英]How to import a file with delimiters irregular with the csv module in python?
[英]How to read in a file with a mixture of different delimiters using Python csv module?
輸入:
A B C
D E F
此文件不是以制表符分隔的,有些條目以空格分隔,看起來像是制表符分隔的(這很煩人)。 我嘗試使用csv
模塊使用規范制表符分隔選項讀取文件,希望它不介意一些空格(不用說,我的輸出出現了這個代碼的拙劣):
with open('file.txt') as f:
input = csv.reader(f, delimiter='\t')
for row in input:
print row
然后我嘗試用csv.reader('\\t'.join(f.split()))
替換第二行,嘗試利用string.whitespace中的Python中的刪除空格,但我的錯誤是: AttributeError: 'file' object has no attribute 'split'
。
我也嘗試過檢查我可以導入CSV文件並自動推斷分隔符嗎? 但是這里OP導入了以分號分隔或逗號分隔的文件,但不是一個隨機混合使用兩種分隔符的文件。
想知道csv
模塊是否可以處理帶有各種分隔符的文件中的讀取,或者我是否應該嘗試不同的方法(例如,不使用csv
模塊)?
我希望有一種方法可以讀取帶有分隔符混合的文件,並自動將此文件轉換為制表符分隔文件。
只需使用.split():
csv='''\
A\tB\tC
D E F
'''
data=[]
for line in csv.splitlines():
data.append(line.split())
print data
# [['A', 'B', 'C'], ['D', 'E', 'F']]
或者,更簡潔:
>>> [line.split() for line in csv.splitlines()]
[['A', 'B', 'C'], ['D', 'E', 'F']]
對於文件,例如:
with open(fn, 'r') as fin:
data=[line.split() for line in fin]
它的工作原理是因為str.split()將拆分數據元素之間的所有空格,即使有超過1個空白字符或混合:
>>> '1\t\t\t2 3\t \t \t4'.split()
['1', '2', '3', '4']
為什么不只是滾動自己的拆分器而不是CSV模塊?
delimeters = [',', ' ', '\t']
unique = '[**This is a unique delimeter**]'
with open(fileName) as f:
for l in f:
for d in delimeters: l = unique.join(l.split(d))
row = l.split(unique)
.split()是一個簡單而好的解決方案,適用於“連續,任意混合的制表符和空格作為一個分隔符”的情況; 但是,當帶有空白的值(由引號標記括起)出現時,這不起作用。
首先,我們可以用一個空白' '
替換文本文件中的每個選項卡; 這可以將情況簡化為“連續,任意數量的空白作為一個分隔符”。
在文件上替換模式有一個很好的例子: https : //www.safaribooksonline.com/library/view/python-cookbook/0596001673/ch04s04.html
注1:不要用''
(空字符串)替換,因為可能有一個分隔符包含ONLY標簽。
注意2:當您在引號旁邊的值中包含制表符( / t )時,此方法不起作用。
然后我們可以使用Python的csv模塊,使用分隔符作為' '
(一個空白),並使用skipinitialspace=True
來忽略連續的空白。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.