Python 组合多个文件读取\u csv和/或file.readline()
我试图读取一个文本数据文件,它由许多连续和交替的数据块组成,每个数据块要么有N行和X列,要么有N+1行和Y列 我的想法是使用Python 组合多个文件读取\u csv和/或file.readline(),python,pandas,Python,Pandas,我试图读取一个文本数据文件,它由许多连续和交替的数据块组成,每个数据块要么有N行和X列,要么有N+1行和Y列 我的想法是使用pd.read\u csv连续调用两次,第一次使用选项nrow=N,第二次使用nrow=N+1,但我发现这个问题我不理解 让我们考虑这个极小的例子: #header first line #header second line -2.000000000000e+00 7.853981633974e-03 -1.998000000000e+00 7.853981633974e
pd.read\u csv
连续调用两次,第一次使用选项nrow=N
,第二次使用nrow=N+1
,但我发现这个问题我不理解
让我们考虑这个极小的例子:
#header first line
#header second line
-2.000000000000e+00 7.853981633974e-03
-1.998000000000e+00 7.853981633974e-03
-1.999000000000e+00 1.570796326795e-05 8.214081241617e-13 8.222110115758e-18 6.069302089412e+00 3.450000000000e+07 3.077971152413e+03 0.000000000000e+00 0.000000000000e+00 -6.315974034994e+02 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00 0.000000000000e+00 -1.000000000000e+00 8.526515773580e+06 2.736441000000e+03
这是我用来读取数据的代码:
import pandas as pd
fp=open('test.txt')
fp.readline()#let's skip first and second line
fp.readline()
q=pd.io.parsers.read_csv(fp,nrows=2,header=None,sep=' ',names=['x_ar','a_ar'])
现在,我期待着进一步研究的结果:
In [4]: fp.readline()
将是最后一行,但是,我得到了一个空字符串
Out[4]: ''
发生什么事了?我怎样才能解决这个问题
另外,我知道我可以用fp.readline
进行迭代,但我对熊猫解决方案感兴趣
fp.readline()
中的空字符串:open(filepath)
打开文件时,将使用文件句柄迭代器
返回。迭代器适用于一次遍历其内容。所以
pd.io.parsers.read\u csv(fp,nrows=2,header=None,sep=)
,names=['x_-ar','a_-ar'])
读取内容并耗尽
迭代器。对pd.read_csv的后续调用认为迭代器是
空的
根据这一点改编的答案
comments='#'
: x_ar a_ar
0 -2.000 0.007854
1 -1.998 0.007854
我不确定
read\u csv
是否设置为在同一打开的文件上处理多次调用。最好的解决方案是对文件进行预处理并将其拆分为多个文件。据我所知,您的文件不是CSV文件,而是多个CSV文件的串联read_csv
用于读取csv文件,而不是多个csv文件的串联。问题不在于如何处理第一行,而是为什么文件中的指针不在调用read_csvWell之后,而确切地说,它不会耗尽迭代器。尝试使用两个1000行的块你是说文件结构使行为不同吗?不是结构,而是每个块的长度(在我的问题之后,数字N)。事实上,在我最初的情况下,n=1000,(不是我的两个例子),我发现在读写CSV指向一个(伪)随机线的时候,fp.readline()
结束后,我做了fp.tell()
。该位置与文件中的字符总数匹配。(使用sum([len(i)for i in open('../test.txt').readlines()]计算字符总数)
)
x_ar a_ar
0 -2.000 0.007854
1 -1.998 0.007854