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

How to import uncommented text from a file in Python?

我正在尝试从具有不同注释 header 行的多个文件中导入数据。但是在导入时,它应该只从文件中导入未注释的文本。如何使用 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--')...... 这应该有效(对于每个数据文件):

imported_lines = []
comment_start = '--comment--'
file_list = ['path/to/file1','path/to/file2','path/to/fileN']
for file_path in file_list:
    data_file = open(file_path,'r')
    for line in data_file.readlines():
        if line[:len(comment_start)]==comment_start:
            continue
        imported_lines.append(line)
    data_file.close()

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

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

if line.startswit('#'):

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

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

(指定 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。它 returns 要跳过的行数,当没有找到它的评论时 returns 0 相反。

code_start('your_file.txt')
>>> 17

这可以通过传递参数 comment='#':

使用 read_csv 加载
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