簡體   English   中英

來自csv行的Python列表並將列表寫入文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM