我有一个关于从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个浮点数。唯一的区别是文件名中的最后一个字母和数字都是浮点数,来自我的实验室测试结果。
我不知道问题是来自正则表达式还是其他任何地方。
有没有人可以帮我这个?非常感谢你!
答案 0 :(得分:0)
你的代码示例有什么问题:
open()
命令参数无法正常工作。 f.close
()
with open(...)
声明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只是在它们中有不同的测试结果。