簡體   English   中英

csv 文件中的 Append 數據與機器人框架

[英]Append data in csv file with robot framework

我有一個 csv 文件為:

col1;col2;col3;col4
val1;val1;;val1
val2;val2;;val2
val3;val3;;val3

我需要 append 為 col3 的每一行設置一個值

我有 col3“indexcol3”的索引和 file.txt 中的所有 ligne 值:

val1
val2
val3

我不知道如何 append 帶有文件值的行? 你能幫我嗎!

使用 pandas,您可以將這兩個文件讀入數據幀,然后將主 df 中的 C3 列替換為當天的 C3 列...txt dataframe

import pandas as pd

df1 = pd.read_csv('main.csv',sep=';')
df2 = pd.read_csv('day_1.txt',sep=';',header=None,Names=['C3'])
df1.C3 = df2.C3
df1.to_csv('updated_main.csv',sep=';')

我想你是說你有你的主要 CSV:

C1;C2;C3;C4
a;A;;1
b;B;;2
c;C;;3

並且您將擁有想要更新 main 的每日值,例如:

day_1.txt
=========
foo
bar
baz

day_2.txt
=========
FOO
BAR
BAZ

如果你像main.py main.csv day_1.txt這樣運行程序,你會得到:

C1;C2;C3;C4
a;A;foo;1
b;B;bar;2
c;C;baz;3

運行main.py main.csv day_2.txt ,你會得到:

C1;C2;C3;C4
a;A;FOO;1
b;B;BAR;2
c;C;BAZ;3

如果是這樣,您需要能夠在迭代主 CSV 的行時迭代 day_X.txt,並將 txt 值插入 CSV。

每次我們在 Python 中打開一個文本文件時,都會得到一個迭代器。 我們通常使用 for 循環來迭代這些行,但我們可以通過在文件上調用 next() 來“手動跳過”這些行:

with open("day_1.txt") as f:
    print(next(f).strip())
    print(next(f).strip())
    print(next(f).strip())

Python 沒有去除行尾,所以我們必須這樣做,我們得到:

foo
bar
baz

現在我們可以看到如何通過控制單步執行文本文件並一次獲取每行的值。 將這個想法與閱讀 CSV 結合起來。

csv 模塊讓我們可以相當輕松地讀寫 CSV 文件。 這是一個簡單的程序,用於讀取輸入 CSV,然后再次將其寫出來,無需修改……無聊,但只是為了熟悉基礎知識:

rows = []
with open("main.csv", newline="") as f_csv:
    reader = csv.reader(f_csv, delimiter=";")

    header = next(reader)  # we have the same control to manually iterate the CSV
    rows.append(header)

    for row in reader:  # or hand over iteration to a for-loop
        rows.append(row)

with open("output.csv", "w", newline="") as f_out:
    writer = csv.writer(f_out, delimiter=";")
    writer.writerows(rows)

我們可以看到我們正常打開文件,將其傳遞給 csv 閱讀器(指定分號分隔符)。 我們得到的閱讀器 object 很像之前的文本文件 object。 我們正在遍歷完整的、已解析的“行”數據,並且我們有相同的機制,next() 和 for 循環。 csv 閱讀器不知道標題,因此我們必須自己考慮這一點,將其復制到行列表中。

最后,我們可以使用 CSV 行添加以鎖定步驟讀取文本文件:

rows = []
with open("main.csv", newline="") as f_csv, open("day_1.txt") as f_txt:
    reader = csv.reader(f_csv, delimiter=";")
    rows.append(next(reader))
    for row in reader:
        col3_val = next(f_txt).strip()
        row[2] = col3_val
        rows.append(row)

我得到:

C1;C2;C3;C4
a;A;foo;1
b;B;bar;2
c;C;baz;3

將 day_1.txt 更改為 day_2.txt,我得到:

C1;C2;C3;C4
a;A;FOO;1
b;B;BAR;2
c;C;BAZ;3

暫無
暫無

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

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