如何从Python中的文件导入未注释的文本?
我正在尝试从具有不同注释标题行的多个文件导入数据。但是在导入时,它应该只导入文件中未注释的文本。如何使用Python实现这一点 更新 数据格式如下:如何从Python中的文件导入未注释的文本?,python,numpy,pandas,import,Python,Numpy,Pandas,Import,我正在尝试从具有不同注释标题行的多个文件导入数据。但是在导入时,它应该只导入文件中未注释的文本。如何使用Python实现这一点 更新 数据格式如下: #=========================== # Lorem ipsum #=========================== # # A # B # C # D # #--------------------------- # Data #--------------------------- # # 1 # 2. # 3. #
#===========================
# 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
可以通过传递paramcomment='#'
来加载:
你能举个简单的例子说明你的数据是什么样子的吗?您尝试过什么?这里有一个
注释
参数,您可以传递给它,但我们确实需要一个原始数据的示例来提供建议
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