[英]Python list from csv line and write list to file
我是 python 的新手,根本沒有任何經驗。
我需要將包含單行的文件轉換為: abc,def,ghi,jkl
,轉換為另一個文件,該文件應具有上一行中的值,如下所示:
abc
def
ghi
jkl
我試過如下但收到錯誤說TypeError: can only concatenate list (not "str") to list
:
#!/usr/bin/python
inputFile = 'servers'
outputFile = 'cservers'
serverList = []
with open(inputFile) as fi, open(outputFile,'w') as fo:
line = fi.readline()
serverList.append(line.split(','))
for i in serverList:
fo.write(i+'\n')
上面的代碼有什么問題?
謝謝
split
返回一個列表,而不是一個字符串。 在serverList.append(..)
行之后,變量serverList
是一個包含字符串列表的列表,看起來像這樣:[['abc', 'def', ...]]。
所以 serverList 是一個列表列表,只有一個元素。 然后你遍歷 serverList(記住,只有一個元素),這個元素是一個列表。 您嘗試將 '\\n' 添加到列表中,這是一個錯誤: TypeError: can only concatenate list (not "str") to list
。 通常,使用您收到的錯誤來查看錯誤:它表示您正在嘗試使用列表添加字符串。
要修復它,只需使用
serverList = line.split(',')
然后整個列表返回的split
命令將在 serverList 中的一個元素內
編輯:如評論中所述,這將僅處理一行輸入 - 但據我所知,這對您來說沒問題(因為您也只閱讀了一行)。 如果以后要遍歷行,可以使用serverList = serverList + line.split(',')
將兩個列表相加
在您的示例中,該行
serverList.append(line.split(','))
導致serverList
看起來像[['abc', 'def', 'ghi', 'jkl']]
。 所以當你來執行
fo.write(i+'\n')
由於控制台輸出中給出的原因,您將收到TypeError
拋出。
您可以通過運行來測試它。
a = [['abc', 'def', 'ghi', 'jkl']]
print(a+'\n')
您可以通過更改代碼來修復代碼,使serverList
是一個字符串列表,表示要寫入outputFile
,而不是包含字符串列表的列表。 請參閱下面的示例解決方案。
#!/usr/bin/python
inputFile = 'servers'
outputFile = 'cservers'
with open(inputFile) as fi:
serverList = fi.read().split(',') # Read file contents as list of strings delimited by comma in file
with open(outputFile,'w') as fo:
fo.writelines(s + '\n' for s in serverList) # Write each string in serverList on own line
當您使用 split() 函數時,它會返回一個列表
因此,名為 serverList 的列表現在包含另一個列表。
現在這個代碼在這里:
for i in serverList:
fo.write(i+'\n')
意味着您正在遍歷 serverList 並記住此列表的每個元素都是另一個列表。
所以這就是錯誤的原因。 因為在您的代碼中:
+'\n'
您正在嘗試使用不可能的字符串連接(加入)列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.