Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError:必须是字符串,而不是列表_Python_List_Formatting_Output - Fatal编程技术网

Python TypeError:必须是字符串,而不是列表

Python TypeError:必须是字符串,而不是列表,python,list,formatting,output,Python,List,Formatting,Output,我确信这已经在StackOverflow和Google之间发布了,但我无法找到解决方案,因为我不知道要搜索的确切术语 我会尽量说得具体一些。我有一堆zip文件,里面有报告,名字像Process123456789results.csv。我需要将CSV文件重命名为其父ZIP文件夹的名称 因此,为了便于理解,我需要将此转换为: IntendedName.zip-->进程123456789Results.csv 为此: IntendedName.csv 为此,我正在使用ZipFile,我的脚本看

我确信这已经在StackOverflow和Google之间发布了,但我无法找到解决方案,因为我不知道要搜索的确切术语

我会尽量说得具体一些。我有一堆zip文件,里面有报告,名字像Process123456789results.csv。我需要将CSV文件重命名为其父ZIP文件夹的名称

因此,为了便于理解,我需要将此转换为:

  • IntendedName.zip-->进程123456789Results.csv
为此:

  • IntendedName.csv
为此,我正在使用ZipFile,我的脚本看起来有点像这样(这里的程序员非常缺乏经验,所以欢迎所有批评):

理想情况下,最终结果将是:

  • 提取CSV

  • 将CSV重命名为ZIP文件名

  • 清理zip文件,只留下重命名的CSV

  • 我的问题:

  • 运行我的代码时,出现以下错误必须是string,而不是list。我试着从几个不同的角度来处理这个问题,但不能完全回避这个问题。我知道这不是同一件事,但我在读关于C语言中的“类型转换”的文章。这里我能做些类似的事情吗?我打算得到一个所有名字的列表,并将其导出到一个文本文件中,然后使用它..但这感觉像是一个肮脏的方法来解决这个问题

  • 我不知道这是否会成为一个问题,但使用调试器,我可以看到“Extracted”的值最终是这样的:[u'Process123456789results.csv']当从z.namelist()调用它时,我认为(未确认)将在修复编号1后中断脚本,因为当我尝试重命名文件时,它将无法找到上面粗体名称的文件,而不仅仅是“Process123456789results.csv”。是否可以通过删除无关字符来修改列表?这可能是我想得太多了。我甚至不知道这是否是一个问题,因为我无法通过上述问题

  • 如果我对某些事情不清楚,我道歉。我会尽力回答任何问题。如果有帮助的话,我可以发布我正在编写的全部代码。不过,它并不十分漂亮

    解决方案:

    在得到一些指导后,我终于想出了解决这个问题的办法。我在上面第二条中提到的问题从未成为问题。下面一些非常有帮助的人解决了第一个问题

    我在Shank评论中提到的“无误索引”问题已通过以下代码解决:

    Extracted = []
    x = 0
    
    for attachment in zip:
    with zipfile.ZipFile("IntendedName.zip", "r") as z:
        z.extractall()
        Extracted.extend(z.namelist())
        os.rename(Extracted[x], "IntendedName.csv")
    os.remove("IntendedName.zip")
    x +=1
    
    编辑:删除多余的括号。
    再次编辑:添加了完整的解决方案。谢谢你们的帮助

    我认为问题在于这一行:

    Extracted = [z.namelist()]
    
    我猜
    namelist()
    已经返回了一个列表,所以您将列表放在列表中。我想你的意思是:

    Extracted = z.namelist()
    

    对于
    os.rename(Extracted[x],“IntendedName.csv”)
    Extracted[0]
    似乎指向一个名称列表。如果您想遍历名称列表,只需将您的作业提取为
    Extracted=z.namelist()
    。当您执行
    Extracted=[z.namelist()]
    时,它会将列表包装在列表中,因此当您访问0索引元素将其传递到
    os.rename
    时,实际上是将列表作为第一个参数传递,而不是预期的字符串。

    谢谢。然而,我最初尝试去掉括号,并在这样做时注意到我得到了一个“索引超出范围”错误。调试器向我显示,它不是向提取列表添加新值,而是实际上覆盖了“提取”的值。结果是一个文件被正确重命名,然后在第二次迭代中出现索引错误。在看了你的答案后,我开始更多地研究列表提供的不同选项。我尝试使用“.append”,但无法使其工作。然后我尝试了“.extend”,它成功地工作了。我将用工作代码更新我的主要帖子,以备将来参考。可能重复的
    Extracted = z.namelist()