簡體   English   中英

使用Python編輯電子表格(通過CSV文件傳遞)

[英]Edit a spreadsheet with Python(passing by CSV file)

我有一個包含以下字段的電子表格:

id age smoker do sport
1   35  yes    rare
2   40  no     frequently
3   20  no     never 
4   ..  ..     ..

我想創建一個Python腳本來編輯這個電子表格,通過csv文件轉換。

“是”變為1,“否”變為0,“罕見”變為0,“頻繁”變為1,“永遠”變為2。

我已將電子表格保存為csv文件,使用分隔符作為';' 和quotechar'“'。

現在我寫這段代碼:

import csv
filecsv=open("file.csv","r")
reader=csv.reader(filecsv, delimiter= ';' , quotechar=' " ')
out=open("outfile.csv","w")
output=csv.writer(out, delimiter= ';' , quotechar=' " ')

for row in reader:
    for field in row:
        if row[field]=='yes':
                .
                .
                .
                .

但我不知道如何繼續....

有人能告訴我如何使用python進行這些更改嗎?

使用Python列表或字典更好嗎?

謝謝大家!

盡管CSV文件看起來像電子表格,但它們的核心只是文本文件。 這意味着您實際上不需要使用csv庫,而是將其作為簡單字符串讀取。

將文件作為字符串后,可以使用正則表達式轉換相關值。 這是一個例子:

import re
o = open("output","w")
data = open("file").read()
o.write( re.sub("someword","newword",data) )
o.close()

請記住,對於要轉換的每個值,您將需要一個re.sub()調用。

看看你如何了解Python的csv庫 ,對於輸入csv的每一行,創建一個包含所需更改的新行並將其寫入新的csv文件應該是微不足道的。

請注意csv閱讀器如何將每一行視為列表。 接下來,看一下csv writer的writerow()方法; 它需要一個python列表並將其寫為csv行。 您需要做的就是一次讀取一行,進行所需的更改並將其吐回給作者。 使用你的代碼:

for row in reader: #for each row in the input
    outrow = list(row) # make a copy of the row. I'm not sure if you NEED to do this, but it doesn't hurt.

    if outrow[2] == "yes": #if the value in the 3rd column, "smoker", is "yes"
        outrow[2] = 1 #change it to 1
    elif outrow[2] == "no": #if it's "no"
        outrow[2] = 0 #change it to 0.

    #repeat this process for outrow[3] (meaning column #4, "do sport")

    output.writerow(outrow)

您可能已經注意到python調用第3列2和第4列3這是因為python從0開始計數(因此第1列是第0列)。 您應該能夠按照此示例進行所需的所有更改。

完成后別忘了關閉文件!

如果您將始終擁有該格式,並且您希望逐行替換:

replacements_dict = {
  'yes': 1,
  'no' : 0,
  'rare': 0,
  'frequently': 1,
  'never': 2
}

for row_list in reader:
   output.writerow([
     row_list[0], 
     row_list[1]
     replacements_dict[row_list[2]],
     replacements_dict[row_list[3]]
    ])

你也可以把你的csv作為一個字符串讀入內存,只需替換像georgesl的字樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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