首页 > 解决方案 > python读取文件追加浮点数但缺少数字

问题描述

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

我的 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

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

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

任何人都可以帮我解决这个问题吗?非常感谢!

标签: pythonregexfileextract

解决方案


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

  • 您的open()命令参数不按给定的方式工作。
  • 您的f.close
    • 缺少一个()
    • 由于with open(...)声明已完全过时
  • re.findall()返回一个列表,不需要附加它,只需 set mylist = re.findall(...)

您的正则表达式不会匹配没有 a 的整数值.,请参阅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 只是有不同数量的测试结果。


推荐阅读