簡體   English   中英

如何使用python腳本將數據寫入現有csv文件中的新列

[英]How to write the data to the new column in existing csv File using python script

下面的代碼是讀取在數據File1從列2,3,4,8,它在寫NewFile 應該在File3搜索每列2中的數據(已經存儲在temp_list )。 如果找到,則File3中每行第三列中的數據將附加存儲在temp_list的數據。 但是第二個for循環僅考慮第一行中的column2數據。 它不考慮剩余行中第2列中的數據。

我在第二個循環中給了print var1 ,以查看是否正在考慮每個列2數據(復制在Newfile )。 但是輸出僅在File3的第一行顯示值。 不搜索其他行中的值。 有人可以幫我理解我的代碼中的問題嗎?

import csv

f1 = csv.reader(open("C:/Users/File1.csv","rb"))
f2 = csv.writer(open("C:/Users/NewFile.csv","wb"))
f3 = csv.reader(open("C:/Users/File3.csv","rb"))

for row_f1 in f1:

    if not row_f1[0].startswith("-"):

        temp_list = [row_f1[1],row_f1[2],row_f1[3],row_f1[7]]

        var1 = row_f1[1]

        for row_f3 in f3:

            if var1 in row_f3:

                temp_list.append(row_f3[2])


        f2.writerow(temp_list)

您的問題之一是,當您for row_f3 in f3:您讀取了文件,但文件不會自動開始。 一種選擇是將行保存到列表中后立即讀取它,但是每次檢查var1是否在列表中都會非常慢。

在row_f3中您嘗試查找var1的字段是什么? 如果鍵相同,則可以使用字典:

d = dict()
for row_f3 in f3:
    d[row_f3[field_index]]  = row_f3[2]

接着:

   new_field = d.get(var1)
   if new_field is not None: temp_list.append(new_field)

您的文件有多少? 如果它們小於1Gb,您也可以嘗試熊貓,而不是逐行閱讀:

import pandas as pd
df1 = pd.read_csv("C:/Users/File1.csv",header=None,index_col=None)
df1 = df1.loc[~df1[0].str.startswith("-"),[1,2,3,7]
df1[8] = df1[1].apply(lambda x: d.get(x))
df1.to_csv("C:/Users/NewFile.csv",header=None)

如果我正確理解了您的描述,則應執行以下操作。 您的代碼的主要問題是,它無法關閉並重新打開第三個文件,以便從中讀取和復制數據。 由於您的代碼通常在關閉文件方面也很草率,因此我通過將其修改為with可自動處理該文件的語句一起使用來解決with這一問題。

import csv

with open("C:/Users/File1.csv", "rb") as file1, \
     open("C:/Users/NewFile.csv", "wb") as file2:
        f2 = csv.writer(file2)

        for row_f1 in csv.reader(file1):
            if not row_f1[0].startswith("-"):
                temp_list = [row_f1[1], row_f1[2], row_f1[3], row_f1[7]]
                var1 = row_f1[1]
                var1_found = False
                with open("C:/Users/File3.csv", "rb") as file3:
                    for row_f3 in csv.reader(file3):
                        if var1 in row_f3:
                            var1_found = True
                            break
                if var1_found:
                    with open("C:/Users/File3.csv", "rb") as file3:
                        for row_f3 in csv.reader(file3):
                            temp_list.append(row_f3[2])
                f2.writerow(temp_list)

暫無
暫無

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

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