【问题标题】:Python list iterate not working as expectedPython列表迭代没有按预期工作
【发布时间】:2022-06-22 21:31:12
【问题描述】:

我有一个名为 list.txt 的文件:

['d1','d2','d3']

我想遍历列表中的所有项目。代码如下:

deviceList = open("list.txt", "r")
deviceList = deviceList.read()
for i in deviceList:
    print(i)

这里的问题是,当我运行代码时,它会拆分所有字符:

% python3 run.py
[
'
d
1
'
,
'
d
2
'
,
'
d
3
'
]

好像所有的项目都被视为 1 个字符串?我认为需要解析?请让我知道我错过了什么..

【问题讨论】:

  • 您还没有列表;你只有一个字符串,它 看起来 像一个 Python 列表。你必须先用ast.literal_eval 之类的东西来解析它。但是,您应该首先考虑list.txt 是如何创建的,并可能将其替换为专为序列化数据结构而设计的东西,例如 JSON。
  • reference @chepner 的回答
  • 您的代码中没有列表。
  • "好像所有的项目都被认为是1个字符串?"这正是read 所做的。

标签: python python-3.x


【解决方案1】:

仅仅因为您没有list,您正在阅读纯文本...

我建议编写list 而不使用[],这样您就可以使用split() 函数。

这样写文件:d1;d2;d3

并使用此脚本获取list

f = open("filename", 'r')
line = f.readlines()
f.close()
list = line.split(";")

如果您需要文件中的[],只需像这样添加strip() 函数

f = open("filename", 'r')
line = f.readlines()
f.close()
strip = line.strip("[]")
list = strip.split(";")

应该是一样的

【讨论】:

    【解决方案2】:

    这不是最简洁的解决方案,但如果您的 .txt 文件始终为“[x,y,z]”格式,则可以。

    deviceList = open("list.txt", "r")
    
    deviceList = deviceList[1:-1]
    deviceList = deviceList.split(",")
    
    for i in deviceList:
        print(i)
    

    这需要你的字符串,去掉“[”和“]”,然后用逗号分隔整个字符串并将其变成一个列表。正如其他用户所建议的那样,存储此列表的方法可能比存储文本文件更好,但是此解决方案将完全按照您的要求进行。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2012-05-09
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多