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

时间:2015-02-20 13:19:36

标签: python numpy pandas import

我正在尝试从具有不同注释标题行的多个文件中导入数据。但是导入它时应该只导入文件中未注释的文本。如何用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。

3 个答案:

答案 0 :(得分:1)

通过传递参数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

答案 1 :(得分:0)

我不确定我是否正确理解了这种情况,但现在就说了。 了解评论行开始的确切方式(例如' - 评论 - ')... 这应该有效(对于每个数据文件):

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='#')

(要指定评论='#'并非严格必要,因为默认设置为

答案 2 :(得分:0)

对于每个文件运行此功能:

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