如何处理来自文本文件的输入数据

时间:2019-04-23 12:49:35

标签: python file input text

我是Python的初学者。为了练习它,我从Code Abbey进行练习。他们通常将输入数据显示为数字列。在下面的示例中,我应该计算算术序列的第一个成员的总和。输入数据分为三列:

25 12 77

27 14 95

8 0 30

...

其中第一列中的数字是序列的起点,第二列中的数字是增量值,最后一列中的数字显示应该求和的值数。

由于这些带有输入数据的列表通常很长,因此我不想将它们硬编码在脚本中。因此,我将它们复制,粘贴并保存在纯文本文件中。 在继续练习之前,我必须经历四个“ for”循环,才能将初始文本文件转换为可行的格式(从字符串转换为整数)。此外,我还必须创建几个列表,然后在列表中附加后续结果。

在第一个“ for”循环之后,我得到了一个字符串列表:['25 12 77','27 14 95',...。]

在第二个“ for”循环之后,我得到了字符串列表的列表[['25','12','77'],['27','14','95']…]

在第三个和第四个(嵌套)“ for”循环之后,我终于收到了一个整数列表[25、12、77、27、14、95…]

with open("input_progression.txt") as file:

    for line in file:
        line = line.strip()
        lines.append(line)

    for strings in lines:
        strings = strings.split(' ')
        g.append(strings)

    for sublist in g:
       for item in sublist:
           flat_list.append(item)
        flat_list = list(map(int, flat_list))

    for numbers in range(int(len(flat_list) / 3)):
        for integer in range(0, flat_list[counter + 2]):
            result += (flat_list[counter] + flat_list[counter + 1] * integer)
        outcome.append(result)
        counter += 3
        result = 0
print (outcome)

这是一件很乏味的工作(所有这些对我来说都是新的)。您是否知道任何更简单(或可能是Pythonian)的方法?在某处有教程如何使用文本文件作为输入?

4 个答案:

答案 0 :(得分:0)

尝试:

with open("input_progression.txt") as f:
    outcome = [int(item) for sublist in [l.split() for l in f] for item in sublist]
print(outcome)

答案 1 :(得分:0)

这更短,更精确

flat_list = []
outcome = []
counter = 0
result = 0
with open("input_progression.txt") as file:
for line in file:
    line = line.strip().split(' ')
    if len(line) >= 1: flat_list.append(line) 
flat_list = [int(item) for sublist in flat_list for item in sublist]


for numbers in range(int(len(flat_list) / 3)):
    for integer in range(0, flat_list[counter + 2]):
        result += (flat_list[counter] + flat_list[counter + 1] * integer)
    outcome.append(result)
    counter += 3
    result = 0
print (outcome)

答案 2 :(得分:0)

您可以使用更少的循环。

with open("input_progression.txt") as file:
    for line in file:
        line = line.strip()
        line = line.split(" ")
        start = int(line[0])
        incr_val = int(line[1])
        num_loops = int(line[2])
        for n in range(num_loops):
            start += incr_val #Increment
        print(start) #answer for each row

答案 3 :(得分:0)

您可以使用正则表达式更轻松地解析文本文件。

import re
file = open("input_progression.txt", "r")
text = ""
for line in file:
  text = text + line
outcome = [int(num) for num in re.findall("[0-9]+", text)]
print(outcome)