在python中打开一个新行分隔的文本文件

时间:2018-03-01 16:34:50

标签: python string csv

以这种方式使用python open内置函数:

with open('myfile.csv', mode='r') as rows:
    for r in rows:
        print(r.__repr__())

我获得了这个输出

'col1,col2,col3\n'
'fst,snd,trd\n'
'1,2,3\n'

我不想要\n字符。您是否知道一种有效的方法来删除该字符(代替明显的r.replace('\n',''))?

2 个答案:

答案 0 :(得分:2)

如果您正在尝试读取和解析csv文件,Python的csv模块可能会提供更好的服务:

import csv
reader = csv.reader(open('myfile.csv', 'r'))
for row in reader:
    print(', '.join(row))

虽然您无法在此处更改阅读器的行终止符,但它会以“\ r”或“\ n”结束一行,这适用于您的情况。

https://docs.python.org/3/library/csv.html#csv.Dialect.lineterminator

同样,对于大多数情况,我认为您不需要手动解析csv文件。有一些问题/原因让csv模块更容易:包含分隔符的字段,包含换行符的字段,包含引号字符的字段等。

答案 1 :(得分:1)

你可以使用string.strip(),它(没有参数)从字符串的开头和结尾删除任何空格:

for r in rows:
    print(r.strip())

如果您只想删除换行符,可以将该字符作为参数传递给strip

for r in rows:
    print(r.strip('\n'))

对于干净的解决方案,您可以使用生成器来包装open,如下所示:

def open_no_newlines(*args, **kwargs):
    with open(*args, **kwargs) as f:
        for line in f:
            yield line.strip('\n')

然后您可以像这样使用open_no_newlines

for line in open_no_newlines('myfile.csv', mode='r'):
    print(line)