【问题标题】:python read file append float number but missing numberspython读取文件追加浮点数但缺少数字
【发布时间】:2018-05-16 06:24:07
【问题描述】:

我有一个关于从 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

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

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

谁能帮我解决这个问题?非常感谢!

【问题讨论】:

  • 这听起来像是您的数据有问题,可能正则表达式失败并给出了不可预测的结果。
  • 不带小数点的浮点数?
  • 嗨,蒂姆,谢谢您的评论。文件中的所有数据都是浮点数,让我感到困惑的是它可以在一个文件中选择所有浮点数,但在另外两个文件中失败。会不会有其他的原因?谢谢!
  • 嗨 Mika72 谢谢你能详细说明一下吗?你的意思是我可能会遗漏一些值,比如 10.000?
  • 如果它是 some string 后跟浮点数并且 some string 可以是任何东西,这可能是要遵循的路径。但如果是 2 行后跟浮点数,则跳过这些行并拆分后面的内容。

标签: python regex file extract


【解决方案1】:

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

  • 您的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 的测试结果数量不同。

【讨论】:

  • 您好,谢谢您的回答!我更新了 f.close 并删除了 .append。我的测试结果只有浮点数,因此我不打算收集任何整数,数据文件中也没有整数。而这个问题依然存在。会不会是其他一些原因?谢谢!!
  • @GIJOE 已编辑。数一数你的点,看看你的文件中是否有不同数量的测试结果。
猜你喜欢
  • 2017-08-07
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 2014-10-13
  • 2017-08-16
相关资源
最近更新 更多