我正在阅读.dat
文件,前几行只是元数据才能获得实际数据。下面是.dat
文件的缩写示例。
&安培; SRS
SRSRUN = 266128,SRSDAT = 20180202,SRSTIM = 122132,
fc.fcY = 0.9000
&安培; END
能量rc ai28945.016 301.32 6.7959
8955.497 301.18 6.8382
8955.989 301.18 6.8407
8956.990 301.16 6.8469
或者作为清单:
['& SRS \ n','SRSRUN = 266128,SRSDAT = 20180202,SRSTIM = 122132,\ n','fc.fcY = 0.9000 \ n','\ n','& END \ n ','energy \ trc \ tai2 \ n','8945.016 \ t301.32 \ t6.7959 \ n','8955.497 \ t301.18 \ t6.8382 \ n','8955.989 \ t301.18 \ t6.8407 \ n','8956.990 \ t301.16 \ t6.8469 \ n']
我之前试过这个但是:
def import_absorptionscan(file_path,start,end):
for i in range(start,end):
lines=[]
f=open(file_path+str(i)+'.dat', 'r')
for line in f:
lines.append(line)
for line in lines:
for c in line:
if c.isalpha():
lines.remove(line)
print lines
但是我得到了这个错误:ValueError:list.remove(x):x不在列表中
我开始查看堆栈溢出然后但是大部分内容是如何从字符串中删除字母字符,所以我提出了这个问题。
这会生成一个字符串列表,每个字符串在文件中构成一行。我想删除任何包含任何字母字符的字符串,因为这应删除所有元数据并只保留数据。任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
我怀疑你会想要一个比#34更强大的规则吗?字符串是否包含一个字母?",但你可以使用正则表达式来检查:
re.search("[a-zA-Z]", line)
您可能想查看regular expression docs。
答案 1 :(得分:0)
此外,您可以使用any
语句检查字母。在内部for
循环内添加:
If any (word.isalpha() for word in line)
请注意,这将说明" ver9"是所有数字,所以如果这是一个问题,只需将其替换为:
line_is_meta = False
for word in line:
if any (letter.isalpha() for letter in word):
line_is_meta = True
break
for letter in word:
if letter.isalpha():
line_is_meta = True
break
if not line_is_meta: lines.append (line)