python - python读取文件追加浮点数但缺少数字
问题描述
我有一个关于从.txt
python 文件中提取数据的问题。
我的 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 个浮点数。唯一的区别是最后一个字母文件名和数字都是来自我的实验室测试结果的浮点数。
我不知道问题是来自正则表达式还是其他任何地方。
任何人都可以帮我解决这个问题吗?非常感谢!
解决方案
您的代码示例有什么问题:
- 您的
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 只是有不同数量的测试结果。
推荐阅读
- django - 在 Django 2 autocomplete_field 上限制查询集
- python - 如何使用 neo4j python 驱动程序获取列表?
- c# - 如何在 asp.net core 2.1 身份 ui 中进行自定义路由?
- python - PySide,如何设置 QMessageBox 文本格式?
- jenkins - 无法在 Jenkins 主页中看到登录和注册选项
- jquery - 将点击功能绑定到不同的图片
- python-3.x - python中的match-mapping-group模式是否有函数式编程的解决方案?
- laravel - 在 laravel 上发布/补丁更新
- sql - 测量 SQL 查询中每个操作的时间
- python - SqlAlchemy:插入语句、实际 SQL 和跳过字段