如何从 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
我正在尝试从具有不同注释 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