我確定這已經發布到StackOverflow和Google之間,但我無法找到解決方案,因爲我不知道搜索的確切術語。TypeError:必須是字符串,而不是列表
我會盡量做到儘可能具體。我有一堆zip文件,裏面有一些名爲Process123456789results.csv的報告。我需要將CSV文件重命名爲其父ZIP文件夾的名稱。
所以,爲了便於理解,我需要把這個:
- IntendedName.zip - > Process123456789results.csv
進入這個:
- IntendedName.csv
要做到這一點,我使用ZipFile ,我的腳本看起來有點像這樣(非常缺乏經驗在這裏程序員,所以所有的批評是值得歡迎的):
Extracted = []
x = 0
for attachment in zip:
with zipfile.ZipFile("IntendedName.zip", "r") as z:
z.extractall()
Extracted = [z.namelist()]
os.rename(Extracted[x], "IntendedName.csv")
os.remove("IntendedName.zip")
x +=1
理想情況下,最終的結果將是:
提取CSV
重命名CSV到ZIP文件的名稱。
清理壓縮文件只留下重命名的CSV。
我的問題:
運行我的代碼,我給出以下錯誤必須是字符串,而不是列出。我試圖從幾個不同的角度來解決這個問題,但無法完全解決這個問題。我知道這不是一回事,但我正在閱讀有關C語言中的「類型轉換」。有沒有類似的東西我可以在這裏做?我將獲得所有名稱的列表並將其導出到一個文本文件並使用它。但是,這感覺像一個骯髒的方式來解決這個問題。
我不知道這是否會是一個問題,但使用調試器,我可以看到的「提取」的價值最終看起來是這樣的:[u'Process123456789results.csv']當它從稱爲z.namelist()其中我認爲(未經證實)會在編號1被修復後破壞腳本,因爲當我嘗試重命名文件時,它將無法通過上面的粗體名稱找到文件,而不僅僅是「Process123456789results .csv」文件。是否可以通過刪除無關字符來修改列表?這可能只是我的想法。我甚至不知道這是否是一個問題,因爲我無法通過上述問題。
我很抱歉,如果我一直不清楚的東西。我會盡力回答任何問題。如果可以幫助,我可以發佈我正在處理的整個代碼。雖然這並不完美。
SOLUTION:
得到一些方向我能弄清楚如何解決這個之後。我在上面討論的第二個問題從未成爲一個問題。 1號由以下一些非常有幫助的個人解決。
的「索引超出錯誤的」我的意見柄提到的問題,用下面的代碼解析:
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
編輯:刪除多餘的括號。 再次編輯:添加完整的解決方案。謝謝你們的幫助!
對不起!我應該在那裏補充說。是的,那是錯誤首先發生的地方。 Os.rename想要一個字符串而不是一個列表。 – Corey
可能重複的[TypeError:必須是str,而不是列表](https://stackoverflow.com/questions/30612799/typeerror-must-be-str-not-list) – jww