有没有更好的方法从这个csv file创建列表或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")
除非要处理所有可能的异常和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']
应该做的伎俩。
你总是可以使用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=',')
您可以使用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文件的选项。有关更多信息,请查看docs
我不确定你想要什么,但试试这个
import csv
with open("Computers discovered recently by discovery method.csv", 'r') as f:
reader = csv.reader(f)
ll = list(reader)
print (ll)
这应该逐行读取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