Python 组合多个文件读取\u csv和/或file.readline()

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

我试图读取一个文本数据文件,它由许多连续和交替的数据块组成,每个数据块要么有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-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指向一个(伪)随机线的时候, Read Load 在中间的一个(伪)随机点。在上次的
    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