簡體   English   中英

讀取每列的第一個元素,然后讀取 csv 文件中的整行

[英]Reading first element of each column and then the entire row in csv file

我有一個 csv 文件,如下所示:

Account     Email       User_Id     User Type   Base Role   Last Login
123456  x@proton.com    111111         inter      user         7
7891011 y@proton.com    222222         inter      user         6
121314  z@proton.com    333333         inter      user         5

並且還會有 50 行這樣的。 每個帳戶可以有多個用戶。 並且同一個帳戶可以在文件中多次列出。 我必須為每個帳戶創建一個新的 csv 文件。 對於每個帳戶,我必須選擇整行並復制其內容。 我該怎么做? 我如何選擇:

for each account number
   if a csv file for this account does not exist already
       create a new file
   copy the entire now and paste it in the new csv file

我可以用這個創建一個新的 csv 文件:

with open("test.csv") as fp

但我不知道如何選擇每個帳號,然后將該行的內容復制並粘貼到新文件中。 我是 Python 的新手。 請幫忙

Python 默認自帶一個csv模塊

import csv

def get_firsts(csvfile, skip_first=True):
    with open(csvfile, 'r') as f:
        data = csv.reader(f, delimiter=',')
        if skip_first:
            _ = next(data)
        firsts = [row[0] for row in data]
    return firsts

這將返回一個僅包含每行第一個元素的列表,如果它是列名,則可以去掉第一個元素。

你可以在python中使用pandas。

import pandas as pd

如果你有 DataFrame -> 沒問題

如果您不這樣做,您可以使用此行將您的 CSV 轉換為 DataFrame

df = pd.read_csv('your_csv_file.csv')

現在您可以使用這樣的 DataFrame 函數來選擇您的數據。

new_df = df.loc[df['Account'] == 123456]

new_df 也是一個 DataFrame。 您可以使用以下方法保存結果 DataFrame:

new_df.to_csv('results.csv')

您可以嘗試使用convtools庫,它提供了許多數據處理原語,包括聚合和 CSV 文件的助手:

from convtools import conversion as c
from convtools.contrib.tables import Table

dialect = Table.csv_dialect(delimiter="\t")
# read the input file
table = Table.from_csv("input_1.csv", header=True, dialect=dialect)
# remember the header
header = table.columns

# prepare a converter to group by first column (we could work with dicts, but
# it is slower), aggregate by storing rows in arrays
converter = (
    c.group_by(c.item(0))
    .aggregate({"account": c.item(0), "rows": c.ReduceFuncs.Array(c.this())})
    .gen_converter()
)

# perform aggregation
data_by_accounts = converter(table.into_iter_rows(list))

# write files
for data in data_by_accounts:
    Table.from_rows(data["rows"], header=header).into_csv(
        "account_{}.csv".format(data["account"]), dialect=dialect
    )

暫無
暫無

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

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