gpt4 book ai didi

python - 文本文件中的分隔符 [0001],在 python 中使用 np.loadtxt 读取

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:43 29 4
gpt4 key购买 nike

我有一个包含多行的文本文件。一行的例子是:3578312 10 3 7 8

但是分隔符是 [0001](在一个框中)而不是传统的分隔符,如逗号或制表符等。

我在 python 中使用 numpy 来阅读这篇文章,有人知道分隔符应该是什么吗?我已经搜索了文档,但一无所获。

import numpy as np
read_data= np.genfromtxt(fname, delimiter='\u0001')

给予:

array([ nan,  nan,  nan, ...,  nan,  nan,  nan])

但是当我将空定界符物理转换为逗号定界符时,我可以使用正确的值读取它。

最佳答案

I know that \u0001 is not the right delimiter. It was just a hypothetical example. I am unable to paste delimiter here, it looks like a closed square box with 0001 in a 2 row by 2 column fashion.

很有可能,\u0001 在某种意义上是正确的分隔符,您只是做错了。

有些字体使用类似的符号来显示非打印控制字符,因此 0001-in-a-box 表示 U+0001,又名标题开始,又名 control-A。*

第一个问题是 Python 2.x 文字 '\u0001' 没有指定那个字符。您不能在 str 文字中使用 \u 转义符,只能在 unicode 文字中使用。 The docs解释一下,但是如果您考虑一下,这是有道理的。因此,文字 '\u0001' 不是源文件编码中的字符 U+0001,它是六个单独的字符(一个反斜杠、一个字母和四个数字)。

那么,您可以只使用 u'\u0001' 吗?嗯,是的,但是您需要将文本文件解码为 Unicode,这在这里可能不合适。它根本不是一个真正的文本文件,它是一个二进制文件。关键是要这样看。

你的文本编辑器不能这样做,因为它是……好吧,一个文本编辑器,所以它解码你的二进制文件就好像它是 ASCII(或者可能是 UTF-8,Latin-1, cp1252, whatever) 文本,然后显示生成的 Unicode,这就是为什么你看到你的字体表示 U+0001。但是 Python 可以让你直接处理二进制数据;这就是 str 的作用。

那么,文件中的实际字节数是多少?如果你这样做:

b = f.readline()
print repr(b)

你可能会看到这样的东西:

'357812\x0110\x0113\x017\x018\n'

这就是关键:您想要的实际分隔符是 '\x01'。**


当然,您可以使用u'\u0001'.encode('Latin-1'),或者您的源文件所采用的任何编码……但这很愚蠢.您知道要匹配什么字节,为什么要尝试提出一个表示该字节的表达式而不是仅仅指定它?


如果你愿意,你也可以将 control-A 分隔符转换成更传统的东西,比如逗号:

lines = (line.replace('\x01', ',') for line in file)

但是没有理由付出额外的努力来解决这个问题。特别是如果某些列可能包含文本,其中可能包含逗号……那么在替换用逗号分隔。


* 从技术上讲,它应该显示为非组合非间距标记……但是在很多情况下您希望看到不可见字符,尤其是控制字符,所以很多字体都有符号,许多文本编辑器都会显示这些符号就好像它们是正常间距的字形一样。除了盒子中的 0001 之外,常见的表示形式还包括不同类型盒子中的 SOH(“标题开始”)或 A(“控制 A”)或 001(ASCII 控制字符的八进制代码)。 This pagethis显示一些字体如何显示它。

** 如果您足够了解,您可以很容易地推断出这一点,因为几乎任何字符集中的 '\x01' 都将解码为 u'\u0001'。但是知道如何直接查看字节比学习其他人的猜测更重要……

关于python - 文本文件中的分隔符 [0001],在 python 中使用 np.loadtxt 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18325719/

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