- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含多行的文本文件。一行的例子是: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 page和 this显示一些字体如何显示它。
** 如果您足够了解,您可以很容易地推断出这一点,因为几乎任何字符集中的 '\x01'
都将解码为 u'\u0001'
。但是知道如何直接查看字节比学习其他人的猜测更重要……
关于python - 文本文件中的分隔符 [0001],在 python 中使用 np.loadtxt 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18325719/
有时评估积分非常困难,但很容易验证解是否正确。在我看来它至少应该是 np,但我对这个概念的理解是有限的,我可能会遗漏一些东西 编辑:为了清楚起见,我很好奇算法的复杂性,该算法找到函数的反导数以解决不定
我对这三个类别的理解是否正确? 要证明问题 X 是 NP: 表明 X 可以在多项式时间内确定性地得到验证(或者X 可以使用 NTM 解决) 要证明问题 X 是 NP 完全的: 表明 X 可以在多项式时
有什么区别NP , NP-完全和 NP-Hard ? 我知道网上有很多资源。我想阅读你的解释,原因是它们可能与外面的不同,或者有一些我不知道的东西。 最佳答案 我假设您正在寻找直观的定义,因为技术定义
我正在寻找一种方法来检查 numpy 数组是 np.float64 还是 np.float32。这适用于 np.float64: a = np.random.rand(10) if not issub
我知道 np.nanargmin 找到列表中不是 NaN 的最小数字。但是,如果调用数组 [np.nan, np.inf],它会产生 0,这是一个 NaN。我发现这种行为很奇怪,我只是想知道以这种方式
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
我很好奇使用 np.empty 到底有多大不同?而不是 np.zeros ,以及关于 np.ones 的区别.我运行这个小脚本来对每个创建大型数组所花费的时间进行基准测试: import numpy
在操作矩阵的时候,不同的接口对于矩阵的输入维度要求不同,输入可能为1-D,2-D,3-D等等。下面介绍一下使用Numpy进行矩阵维度变更的相关方法。主要包括以下几种: 1、np.newaxis扩充
除了使用一组 or 语句之外 isinstance( x, np.float64 ) 或 isinstance( x, np.float32 ) 或 isinstance( np.float16 )
我尝试了以下代码,但没有发现 np.dot 和 np.multiply 与 np.sum 之间的区别 这里是 np.dot 代码 logprobs = np.dot(Y, (np.log(A2)).T
我编写了一些程序来更新 numpy在每次迭代中列出并对其进行一些操作。迭代次数取决于时间。例如在 1 秒内,可能有 1000 到 2500 次迭代。这意味着 numpy 列表中的项目对于运行程序 1
我有以下两个数据框: a = pd.DataFrame([[1,2, 3],[4,3,6], [np.nan, 2, np.nan]]) 0 1 2 0 1.0 2 3.0 1
我有一个包含很多非零值的数组。当我使用以下方法计算非零项目总数时,我得到了 2 个不同的结果: 1) non_zero_weights = np.any(np.not_equal(lr_l1.coef
我对这么多int有点挣扎cython 中的数据类型。 np.int, np.int_, np.int_t, int 我猜 int在纯python中相当于np.int_ , 那么 np.int 在哪里来
如果您要选择以下三种初始化零数组的方法之一,您会选择哪一种以及为什么? my_arr_1 = np.full(size, 0) 或 my_arr_2 = np.zeros(size) 或 my_arr
我正在使用 np.select 根据应用于其他列的多个条件创建一个新列。这是一个简单的例子: df = pd.DataFrame({'A': [0, 3, 4], 'B': [10, 0, 2]})
我正在使用 np.select 根据应用于其他列的多个条件创建一个新列。这是一个简单的例子: df = pd.DataFrame({'A': [0, 3, 4], 'B': [10, 0, 2]})
我正在读这个code ,用于从头开始实现线性回归: # convert from data frames to numpy matrices X = np.matrix(X.values) y = n
我正在解压缩具有许多不同数据类型的大型二进制文件 (~1GB)。我正处于创建循环以隐藏每个字节的早期阶段。我一直在使用 struct.unpack,但最近认为如果我使用 numpy 它会运行得更快。然
我需要从依存分析树中提取形式为 NP-VP-NP 的三元组,作为 Stanford Parser 中词汇化分析的输出。 执行此操作的最佳方法是什么。例如如果解析树如下: (ROOT (S
我是一名优秀的程序员,十分优秀!