【问题标题】:How do I read from a file and put it into a list as an integer? Python如何从文件中读取并将其作为整数放入列表中? Python
【发布时间】:2015-07-11 23:51:00
【问题描述】:

这就是我所拥有的

file = open("numberlist.txt")
list = []
for line in file:
      line = line.strip()
      list.append(line)

我会在文件中的 for 行中将每一行转换为整数:我该怎么做?

可选:如果我在numberlist.txt 中有非数字字符?我怎样才能测试它并且必须程序告诉我文件不正确?

【问题讨论】:

  • 旁注:不要打电话给你的名单list。如果这样做,您将无法再访问实际的 list 类型。
  • 如果你用variable = open()打开一个文件,那么别忘了也用variable.close()关闭它

标签: python list file


【解决方案1】:

如果每行有一个数字,则可以直接使用file-objectmap 函数:

with open("numberlist.txt") as f:
     num_list=map(int,f)

注意:切勿使用 python 内置名称作为变量名,也不要使用 with 语句打开文件。

with 语句用于用上下文管理器定义的方法包装块的执行。

详细了解with 语句及其使用优势。 https://docs.python.org/2/reference/compound_stmts.html

但是,如果您的文件中可能包含非数字字符,则根据您的文件外观,您可以使用exception-handling 之类的一些配方,可以使用try-except 语句来完成。

因此,如果我们假设您在每一行中都有一个单词(包含数字或字符),您可以这样做

num_list=[]
with open("numberlist.txt") as f:

  for line in f:
     try :
       num_list.append(int(line))
     except:
       continue #or other stuffs

注意,这可能有很多场景,并且根据您的代码,您可以使用各种方法!

【讨论】:

  • 为什么添加f.readlines() 而不仅仅是他原来的f?除了使代码更长、更慢和浪费内存之外,它没有添加任何东西。
  • @abarnert 当然,我记得我已经回答了很多问题,我建议使用file-object 而不是阅读行:)。所以我知道它只是一个奇怪的遗忘的所有原因!非常感谢提醒!
【解决方案2】:

如果愿意,您可以使用int 构造函数或类型转换,将字符串转换为整数。如果无法进行转换,它会抛出 ValueError

int_value = int(strvalue)

在 python 中对列表中的所有元素执行相同操作的一个好方法是使用 map 函数。在解释器中做一个help(map) 看看它是如何工作的

# assuming that the file exists
file = open("numberlist.txt")
my_list = []
for line in file:
        line = line.strip()
        list.append(line)
try:
    list_of_ints = map(int, my_list)
except ValueError:
    print("invalid file")

要检查列表是否正确,请将操作放在 try-except 块中。

您可以使用with 语句在几行中完成所有这些操作

with open("numbers.txt") as file_object:
    try:
        list_of_ints = map(int, (l.strip() for l in file_object))
    except ValueError:
        print("invalid file")

这里我使用 file_object 作为可迭代对象(它给出了文件中的所有行)。并使用生成器语法创建另一个应用映射函数的迭代

【讨论】:

    【解决方案3】:
    file = open("numberlist.txt",'r')
    l = []
    
    for line in file:
        line = line.split()
        try:
            l.append(int(line[0]))
        except:
            continue
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多