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