在newline参数内打开Python文件

时间:2017-09-18 08:00:05

标签: python

我有一个包含以下内容的tsv文件:

'"1"\t"2"\t"3"\t"4"\n'
'"5"\t"6\n7"\t"8"\t"9"\n'

我希望能够忽略双引号内的\ n符号,但文件的readline()方法读取如下:

1 2 3 4
5 6
7 8 9

我想要的是:

1 2 3 4
5 6\n7 8 9

我尝试将其传递给换行参数:

f = open('file.tsv', newline = '"\n')
f = open('file.tsv', newline = '\"\n')

但是我得到了

ValueError: illegal newline value: "

1 个答案:

答案 0 :(得分:3)

Readline方法不包括类似tsv的字符串,只是按原样读取内容。 Python提供了CSV包来读取这些文件:

import csv
with open('test.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter='\t', quotechar='"')
    for row in reader:
        print(', '.join(row))

了解更多此套餐in the docs

BTW,你的newline参数技巧会引发错误,因为它可能是None'''\n''\r''\r\n'

请注意,换行仅适用于文字模式。

<强>更新

请参阅下面的topicstarter数据示例:

from io import StringIO

file = StringIO("""'"1"\t"2"\t"3"\t"4"'
'"5"\t"6\n7"\t"8"\t"9"'""")
reader =csv.reader(file, delimiter='\t', quotechar='"')
for row in reader:
    print(row)

输出:

['\'"1"', '2', '3', "4'"]
['\'"5"', '6\n7', '8', "9'"]

因此它按预期工作 - 当您打开文件时,无法正确执行拆分,csv.reader使用文件对象,而不是使用行。