【问题标题】:Extracting Info From a .txt File and Converting to int从 .txt 文件中提取信息并转换为 int
【发布时间】:2022-01-17 09:22:54
【问题描述】:

我实际上是在尝试编写一个代码,将我每晚的小费分成单独的储蓄计划,并将其写入 .txt 文件。

我在从文本文件中读取旧总数并添加补充提示然后将产品重写到 .txt 文件时遇到问题。

请告诉我这是否是一种荒谬的做事方式,我需要改变我的整个做事方式。

import re


savings1 = 0  
savings2 = 0
savings3 = 0
savings4 = 0
savings5 = 0
savings6 = 0

'initint' 接受值。

initint = input('Please input todays tips, or Enter to exit:')

然后while循环将值分成各个百分比并将它们分配给我的储蓄计数器。

while initint != "":
    
    savings1 += (int(initint)*0.50)
    savings2 += (int(initint)*0.05)
    savings3 += (int(initint)*0.25)
    savings4 += (int(initint)*0.10)
    savings5 += (int(initint)*0.05)
    savings6 += (int(initint)*0.05)
    
    initint = input('Please input todays tips, or Enter to exit:')
    
    if initint == "":
        break

这就是(我认为)问题所在。

这个想法是使用正则表达式来识别 txt 文件中的数字,然后返回它们,以便我可以将它们添加到 while 循环划分的值中。

目前我只能打印它们。

with open('divisions.txt','r+') as r:
    for line in r:
        
        I = re.findall('\d+\d', line)
        
        print(I)

所以输出现在看起来像这样(如果旧输入是 500)。

[]
[]
['250']
['25']
['125']
['50']
['25']
['25']

第一个问题是它正在返回列表。

第二个问题是它从前 2 行返回 2 个空列表,没有数字,这有点奇怪。

我什至不知道我什至会用谷歌搜索来开始这一步。


最后一步将总数写入文本文件。


with open('divisions.txt','w') as f:
    
    f.write(f'Savings Plan:\n\nsavings1: {savings1}\nsavings2: {savings2}\nsavings3: {savings3}\nsavings4: {savings4}\nsavings5: {savings5}\nsavings6: {savings6}\n')

如果我很傻,请告诉我,但如果有人愿意提供帮助,我将不胜感激。

感谢阅读。

【问题讨论】:

  • 请注意,\d+\d 至少匹配 2 位数字
  • 您可以将数据输出为易于导入和使用的 JSON(或任何其他机器可解析的结构化语言),而不是将值作为纯文本写出然后进行解析。

标签: python regex list input findall


【解决方案1】:

您的正则表达式假定所有数字都是两位数或更多,我会将其更改为r'\d+'

findall函数总是返回一个列表,但是你可以检查长度是否大于0并获取第一个数字。

with open('divisions.txt','r+') as r:
    for line in r:
    
        I = re.findall(r'\d+', line)
        if (len(I) > 0):
            number = I[0]
            print(number)

【讨论】:

  • 谢谢!还有一个问题,你知道我如何命名每个结果,因为它们是在 for 循环中提取的吗?就像产生的每个整数都可以命名为 int1、int2 等等这样的第四个
  • 当然!您可以将for line in r 更改为for idx, line in enumerate(r),其中idx 将是行号。如果您希望数字独立于它所在的行号,您可以创建一个单独的计数器并在 if 检查为真时增加它。
猜你喜欢
  • 1970-01-01
  • 2022-06-30
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2017-04-14
相关资源
最近更新 更多