Python csv字段中的新行字符

时间:2015-07-29 12:41:16

标签: python csv

我在阅读一个以分区为界的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

这适用于大多数文件,但我假设有一行在其中一个字段中有一个新行字符 - 我不确定如何诊断它。这是该行在记事本中的显示方式的屏幕截图,因为您可以看到它在两行上强制显示该行应该看起来像下面的两行。 enter image description here

使用csv.reader阅读此行,如下所示:

['06-13-2015-10:13:41','0','','','','','','','','','',' ','142','','5','7.0','2','','cmhkl966','amex_674','1','0.00','','',''']

即。截断了第一个撇号。

2 个答案:

答案 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