如何从Python中的文件导入未注释的文本?

如何从Python中的文件导入未注释的文本?,python,numpy,pandas,import,Python,Numpy,Pandas,Import,我正在尝试从具有不同注释标题行的多个文件导入数据。但是在导入时,它应该只导入文件中未注释的文本。如何使用Python实现这一点 更新 数据格式如下: #=========================== # Lorem ipsum #=========================== # # A # B # C # D # #--------------------------- # Data #--------------------------- # # 1 # 2. # 3. #

我正在尝试从具有不同注释标题行的多个文件导入数据。但是在导入时,它应该只导入文件中未注释的文本。如何使用Python实现这一点

更新

数据格式如下:

#===========================
# Lorem ipsum
#===========================
#
# A
# B
# C
# D
#
#---------------------------
# Data
#---------------------------
#
# 1
# 2.
# 3.
# 4.
75  123
76  168
77  345
78  454
目前我正在使用numpy loadtxt导入:

data = np.loadtxt('data.dat', skiprows=17, delimiter='\t', unpack=True)

但是注释行在不同的文件中是不同的,我必须导入5000多个文件。每次跳过行都不是17。

我不确定我是否正确理解这种情况,但现在开始。 知道注释行开始的确切方式(例如--comment--’)。。。 这应该有效(对于每个数据文件):

编辑:在您的情况下,您应该将comment#u start设置为“#”,或者简单地更改

if line[:len(comment_start)]==comment_start:

EDIT2:numpy.loadtxt具有默认设置comment='#',它跳过以'#'开头的行。您应该将导入行更改为

data = np.loadtxt('data.dat', delimiter='\t', unpack=True, comments='#')

(要指定注释=“#”并非绝对必要,因为它是默认设置的)

对于每个文件,请运行此函数:

def code_start(filename):
    with open(filename, 'r') as fh:
        for i, line in enumerate(fh.readlines()):
            if not len(line): continue
            if not line[0] is '#': return i
        return 0
对于示例文件,这将导致
17
。它返回要跳过的行数,如果没有找到注释,则返回
0

code_start('your_file.txt')
>>> 17
可以通过传递param
comment='#'
来加载:


你能举个简单的例子说明你的数据是什么样子的吗?您尝试过什么?这里有一个
注释
参数,您可以传递给它,但我们确实需要一个原始数据的示例来提供建议
def code_start(filename):
    with open(filename, 'r') as fh:
        for i, line in enumerate(fh.readlines()):
            if not len(line): continue
            if not line[0] is '#': return i
        return 0
code_start('your_file.txt')
>>> 17
In [450]:

temp='''#===========================
# Lorem ipsum
#===========================
#
# A
# B
# C
# D
#
#---------------------------
# Data
#---------------------------
#
# 1
# 2.
# 3.
# 4.
75  123
76  168
77  345
78  454'''
df = pd.read_csv(io.StringIO(temp), sep='\s+',comment='#', header=None)
df
Out[450]:
    0    1
0  75  123
1  76  168
2  77  345
3  78  454