python读取文件附加浮点数但缺少数字

时间:2018-05-16 06:24:08

标签: python regex file extract

我有一个关于从python中的.txt文件中提取数据的问题。

我的data.txt文件看起来像这样

data 2018/05/37
time 5:5:55
1.234 5.241 6.284 .....

它有一些字符串,后跟44388个浮点数。

我使用下面的行来提取它:

mylist=[]
with open('folderpath' + 'filenameA.txt') as f:
    mylist.append(re.findall('\d*?\.\d+', f.read()))
f.close

然而,我没有在mylist中获取44388个浮点数,当我读取文件A时,我最终得到44383个浮点数,当我读取文件B时,我得到44378个浮点数,当我读取文件C时,得到44388个浮点数。唯一的区别是文件名中的最后一个字母和数字都是浮点数,来自我的实验室测试结果。

我不知道问题是来自正则表达式还是其他任何地方。

有没有人可以帮我这个?非常感谢你!

1 个答案:

答案 0 :(得分:0)

你的代码示例有什么问题:

  • 您的open()命令参数无法正常工作。
  • 您的f.close
    • 缺少()
    • 由于with open(...)声明,
    • 完全过时了
  • re.findall()返回一个列表,无需附加,只需设置mylist = re.findall(...)即可。

如果没有.,您的正则表达式将无法匹配整数值,请参阅regex101 - 所以

1.234 135.241 6.284 .372   2   3.2

你只匹配

1.234 135.241 6.284 .372        3.2

如果您的文件始终以您要丢弃的2行开头,后跟浮点数,则可以执行以下操作:

import re
data = """data 2018/05/37 
time 5:5:55 
1.234 5.241 6.284
11.234 15.241 16.284
21.234 25.241 26.284
31.234 35.241 36.284
1 2 3
"""

fn = "data.txt"
with open(fn,"w") as f:
    f.write(data)

with open(fn,"r") as f:
    dateData = f.readline()
    timeData = f.readline()
    mylist = re.findall('((?:\d*?\.\d+)|(?:\d+?))', f.read()) # also works for ints
    # mylist = [x for x in f.read().replace("\n"," ").split(" ") if x]

print(mylist)

如果您仍有不同的数字计数,并且每个浮点数确实包含.,请使用文本编辑器计算文件中.的数量。最可能的A,B和C只是在它们中有不同的测试结果。