簡體   English   中英

將CSV解析為列表或數組的更好方法

[英]Better way to parse CSV into list or array

是否有更好的方法從此csv文件創建列表或numpy數組? 我要問的是如何做到這一點,並且比在下面的代碼中更優雅地解析。

fname = open("Computers discovered recently by discovery method.csv").readlines()
lst = [elt.strip().split(",")[8:] for elt in fname if elt != "\n"][4:]

lst2 = []
for row in lst:
    print(row)
    if row[0].startswith("SMZ-") or row[0].startswith("MTR-"):
        lst2.append(row)

print(*lst2, sep = "\n")

您可以隨時使用Pandas 舉個例子,

import pandas as pd
import numpy as np

df = pd.read_csv('pandas_dataframe_importing_csv/example.csv')

要轉換它,您必須將其轉換成您喜歡的數字類型。 我想您可以將全部內容寫成一行:

result = numpy.array(list(df)).astype("float")

您還可以執行以下操作:

from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')

我不確定您想要什么,但可以嘗試一下

import csv
with open("Computers discovered recently by discovery method.csv", 'r') as f:
    reader = csv.reader(f)
    ll = list(reader)

print (ll)

這應該逐行讀取csv並將其存儲為列表

您可以使用pandas並指定標題列以使其在示例文件上正常工作

import pandas as pd

df = pd.read_csv('Computers discovered recently by discovery method.csv', header=2)

您可以使用以下方法檢查內容:

>>> df.head()

您可以使用以下方式檢查標題

>>> df.columns 

並將其轉換為numpy數組,您可以使用

>>> np_arr = df.values

它帶有很多選項來解析和讀取csv文件。 有關更多信息,請檢查文檔

樣例代碼

import csv
csv_file = 'sample.csv'
with open(csv_file) as fh:
  reader = csv.reader(fh)
  for row in reader:
    print(row)

sample.csv

name,age,salary
clado,20,25000
student,30,34000
sam,34,32000

除非要解決所有可能的異常和CSV格式異常,否則切勿手動解析CSV結構。 在這方面,Python的csv模塊涵蓋了您。

就您而言,主要問題來自於數據-單個文件中似乎存在兩種不同的CSV結構,因此您首先需要查找第二種結構的起始位置。 此外,從你的代碼,它似乎要篩選出前所有列Details_Table0_Netbios_Name0 ,包括其唯一行Details_Table0_Netbios_Name0開頭SMZ-MTR- 所以像這樣:

import csv

with open("Computers discovered recently by discovery method.csv") as f: 
    reader = csv.reader(f)  # create a CSV reader
    for row in reader:  # skip the lines until we encounter the second CSV structure/header
        if row and row[0] == "Header_Table0_Netbios_Name0":
            break
    index = row.index("Details_Table0_Netbios_Name0")  # find where your columns begin
    result = []  # storage for the rows we're interested in
    for row in reader:  # read the rest of the CSV row by row
        if row and row[index][:4] in {"SMZ-", "MTR-"}:  # only include these rows
            result.append(row[index:])  # trim and append to the `result` list

print(result[10])  # etc.
# ['MTR-PC0BXQE6-LB', 'PR2', 'anisita', 'VALUEADDCO', 'VALUEADDCO', 'Heartbeat Discovery',
#  '07.12.2017 17:47:51', '13']

應該可以。

暫無
暫無

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

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