“tuple”对象不支持项分配打开(索引)

2024-03-28 18:01:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,遇到了一些困难。我正在尝试以下代码:

import os

ListB=[]
for x in os.listdir('C:\\Users\\admin\\Desktop\\.....\\......\\filesC'):

    fullPath = 'C:\\Users\\admin\\Desktop\\......\\.......\\filesC' + '\\' + x 
    ListB.append(fullPath)  
File_a=open('C:\\Users\\admin\\Desktop\\......\\Object.txt').readlines()

FullFilesList=()

index=0;
for x in ListB:

    FullFilesList[index]=open(x).readlines() + File_a
    index+=1

我得到了这个错误:

^{pr2}$

TypeError:“tuple”对象不支持项分配

如果我的问题不够聪明,我很抱歉,但我习惯用C语言编写代码。如果有人能给我一个如何解决这个问题的建议,我会很高兴的。提前谢谢。在


Tags: 代码inforindexadminosopenusers
3条回答

当Python解释器运行FullFilesList=()行时,它将创建一个新的空元组,并将名称FullFilesList绑定到它。元组是不可变的,它们在创建之后不能被更改,所以不能太多地使用这个变量。相反,听起来你想要一份清单。要创建空列表,请使用为ListB:FullFilesList=[]创建列表时使用的相同语法

但你会遇到另一个问题。当您想将值添加到FullFilesList时,您将它们分配给一个尚不存在的索引。那不行。如果要将每个值附加到列表的末尾,请改用list.append方法(同样,就像您在第一个循环中对ListB所做的那样)。在

代码中还有一些小的地方可以改进。我要指出的两个是命名约定和with语句。常规变量名的Python约定是使用lowercase_names_with_underscores。限制CapitalizedNames用于类,除非您遵循使用其他约定的现有API。您可以在PEP 8中阅读有关Python样式建议的更多信息。请注意,这是Python解释器本身的风格指南,并不是所有Python项目都遵循它来编写自己的代码(但很多项目都这么做了!)。在

我的另一个建议是确保你的文件在处理完之后被关闭。在您当前的代码中,您经常open对一个文件调用readlines方法,然后在不调用close的情况下删除它。由于文件对象将被垃圾回收,并且它将作为该过程的一部分关闭,因此通常可以正常工作。但它不能保证以这种方式工作(Python语言对何时进行垃圾收集没有强有力的保证)。更好的方法是使用with语句确保文件是自己关闭的:

with open(filename) as f:
    contents = f.readlines()
# the file is closed automatically when you exit the with block (you can still use contents)

即使FullFilesList顾名思义是一个列表,您也在以不受支持的方式处理它。根据经验,不要索引。为不存在的索引赋值是对列表的IndexError,而对字典是一个插入。对于元组来说这是不可能的。使用append

FullFilesList = list()   # or just []
for x in ListB:
    FullFilesList.append(open(x).readlines() + File_a)

或者一步一步构建完整的列表:

^{pr2}$

这往往更容易解释,因为列表没有中间状态,我们不需要跟踪它的长度(如果需要,请使用len(FullFilesList))。在

当您声明FullFilesList = ()时,您正在声明一个元组(尝试键入type(FullFilesList)进行验证)。元组在Python中是不可变的,因此不能在for循环中更改FullFilesList(只能创建一个新的tuple并使FullFilesList引用该新元组)。更多详细信息,请参阅其他文章,如本文:TypeError: 'tuple' object does not support item assignment when swapping values。在

相关问题 更多 >