我在阅读一个以分区为界的csv文件时遇到了一个问题,我认为其中一个字段中有一个新行字符。它强制行超过两行,所以我无法读取行的最后一个字段中的值。我试过在new line mode
打开,但不确定最好的解决办法是什么。
这就是我尝试在python
中读取文件的方式:
csv.register_dialect('BB', delimiter='\xfe')
with open(file, 'rU') as file_in:
log=csv.reader(file_in, dialect='BB')
for row in log:
print row
这适用于大多数文件,但我假设有一行在其中一个字段中有一个新行字符 - 我不确定如何诊断它。这是该行在记事本中的显示方式的屏幕截图,因为您可以看到它在两行上强制显示该行应该看起来像下面的两行。
使用csv.reader
阅读此行,如下所示:
['06-13-2015-10:13:41','0','','','','','','','','','',' ','142','','5','7.0','2','','cmhkl966','amex_674','1','0.00','','',''']
即。截断了第一个撇号。
答案 0 :(得分:0)
我稍微解决了你的问题(希望我抓住了问题的原因):
import io
import csv
file_in = io.StringIO('''
aþbþ'hello
world'
''')
log=csv.reader(file_in, delimiter='\xfe', quotechar="'")
for row in log:
print(row)
输出:
['a', 'b', 'hello\nworld']
<强>更新强>
根据评论中的要求:此处是从文件中读取.csv
的版本。 test.csv
的内容是:
aþbþ'hello
world'þc
dþeþ'hello
other
things'þf
gþhþiþj
和python代码:
import csv
from pathlib import Path
HERE = Path(__file__).parent
DATA_PATH = HERE / '../data/test.csv'
with DATA_PATH.open('rU') as file_in:
log=csv.reader(file_in, delimiter='\xfe', quotechar="'")
for row in log:
print(row)
输出:
['a', 'b', 'hello\nworld', 'c']
['d', 'e', 'hello\nother\nthings', 'f']
['g', 'h', 'i', 'j']
答案 1 :(得分:0)
您也可以检查下一行的第一个元素是否以时间戳开头,如果没有,请使用list extend
函数在打印前将其添加到当前行的内容中。
免责声明:未经测试
import re
csv.register_dialect('BB', delimiter='\xfe')
with open(file, 'rU') as file_in:
log=csv.reader(file_in, dialect='BB')
for i in range(0, len(log) - 1):
if re.search('\d+-\d+-\d+-\d+:\d+:\d+', log[i+1][0]) is None:
i.extend(log[i+1])
print i