用for循环读取文本文件

时间:2017-11-23 17:29:55

标签: python

我有一个包含多行的文本文件,其编号范围从1到5,格式如下:'1,2,3,4,5'。我想读取文本文件的每一行。在每一行我想找到'1'。

然后,我希望将列表值的值增加1,具体取决于文本文件中“1”的位置。例如。如果'1'在文本文件中的位置0,我希望列表位置0增加1(对于文本文件中的每一行)。

我当前的代码没有读取文本文件,因此它不是在每行读取'1'并执行上述功能。这是我的代码(对于冗长的解释感到抱歉):

with open("test file.txt","r+") as file:
    oneNum = [0,0,0,0,0]
    text = [line.rstrip("\n") for line in open("test file.txt")]
    for line in text:
        for counter in range(0,4):
            if line[counter] == "1":
                oneNum[counter] = oneNum[counter] + 1

3 个答案:

答案 0 :(得分:1)

考虑到问题中描述的简单输入格式,可以简化(和纠正)实现:

  • 使用零初始化oneNum
  • 对于文件中的每一行
    • 找到索引“1”
    • 将索引转换为列表位置:由于可能的索引是0,2,4,6,8,我们可以简单地除以2转换为0,1,2,3,4
    • oneNum
    • 中增加正确索引处的值

像这样:

with open("test file.txt") as file:
    oneNum = [0] * 5
    for line in file:
        index = line.find("1") // 2
        oneNum[index] += 1

答案 1 :(得分:0)

with open("test file.txt", "r+") as file:
    oneNum = [0 for _ in range(5)]  # Easier to adjust later
    for line in file:
        position = [num.strip() for num in line.split(',')].index('1')
        oneNum[position] += 1

答案 2 :(得分:0)

使用Python的正则表达式模块,re使这很容易。例如,假设这是输入文件的内容:

1,2,3,4,5
2,1,3,4,5
3,2,1,4,5
4,5,1,3,2

这是代码显示如何使用re来解决问题。请注意删除','字符如何使用匹配字符的位置来更新相应的计数器。

import re

oneNum = [0, 0, 0, 0, 0]
with open("test file.txt") as file:
    pattern = r"1"
    for line in file:
        line = line.strip().replace(',', '')
        match = re.search(pattern, line)
        if match:
            counter = match.span()[0]
            oneNum[counter] += 1

print(oneNum)  # -> [1, 1, 2, 0, 0]