gpt4 book ai didi

Python:读取严格按 0x0a 分隔的文件,而不是 '\n' 字符串

转载 作者:行者123 更新时间:2023-11-28 21:21:30 25 4
gpt4 key购买 nike

我需要读取一个巨大的(大于内存)未加引号的 TSV 文件。字段可能包含字符串“\n”。然而,python 试图变得聪明并将该字符串一分为二。例如一行包含:

cat    dog    fish\nchips    4.50

分成两行:

['cat', 'dog', 'fish']
['chips', 4.5]

我想要的是一行:

['cat', 'dog', 'fish\nchips', 4.5]

我怎样才能让 python 不再聪明而只是在 0x0a 上分割线?

我的代码是:

with open(path, 'r') as file:
for line in file:
row = line.split("\t")

引用 TSV 文件不是一个选项,因为我不是自己创建的。

最佳答案

这已经可以正常工作了;对于带有文字 \ 后跟文字 n 字符(两个字节)的文件,Python 永远不会将其视为换行符。

那么,您拥有的是单个 \n 字符,一个实际的换行符。 其余 文件由 \r\n Windows 常规行分隔符分隔。

使用io.open()控制换行符的处理方式:

import io

with io.open(path, newline='\r\n') as infh:
for line in infh:
row = line.strip().split('\t')

演示:

>>> import io
>>> with open('/tmp/test.txt', 'wb') as outfh:
... outfh.write('cat\tdog\tfish\nchips\t4.50\r\nsnake\tegg\tspam\nham\t42.38\r\n')
...
>>> with io.open('/tmp/test.txt', newline='\r\n') as infh:
... for line in infh:
... row = line.strip().split('\t')
... print row
...
[u'cat', u'dog', u'fish\nchips', u'4.50']
[u'snake', u'egg', u'spam\nham', u'42.38']

请注意,io.open() 还会将您的文件数据解码为 un​​icode;您可能需要为非 ASCII 文件数据指定显式编码。

关于Python:读取严格按 0x0a 分隔的文件,而不是 '\n' 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com