14

我有一个要解析的 Excel 文件(我将其导出为 csv),但我无法找到最好的方法。csv 是我网络中的计算机列表,以及每个计算机在本地管理员组中的帐户。我对元组做了类似的事情,但是每台计算机的帐户数量从 1 到 30 不等。我想建立一个列表列表,然后遍历每个列表以找到应该存在的帐户(管理员等)并删除它们,这样我就可以导出一个不应该是本地管理员但应该是本地管理员的帐户列表。csv 文件的格式如下:

"computer1"    Administrator    localadmin    useraccount
"computer2"    localadmin       Administrator 
"computer3"    localadmin       Administrator user2account

任何帮助,将不胜感激

编辑:这是我正在使用的代码

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    data = list(list(rec) for rec in csv.reader(f, delimiter=',')) #reads csv into a list of lists
    f.close() #close the csv

for i in range(len(data)):
    print data[i][0] #this alone will print all the computer names
    for j in range(len(data[i])) #Trying to run another for loop to print the usernames
        print data[i][j]

问题在于第二个 for 循环。我希望能够阅读每一行,现在,只需打印它们。

4

3 回答 3

18

这应该让你走上正确的轨道:

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    data = list(list(rec) for rec in csv.reader(f, delimiter=',')) #reads csv into a list of lists

    for row in data:
        print row[0] #this alone will print all the computer names
        for username in row: #Trying to run another for loop to print the usernames
            print username

最后两行将打印所有行(包括“计算机”)。做

for x in range(1, len(row)):
    print row[x]

...避免两次打印计算机。

请注意,使用“with”构造时不需要 f.close(),因为退出“with”块时资源将自动关闭。

就个人而言,我会这样做:

import csv 
import sys #used for passing in the argument
file_name = sys.argv[1] #filename is argument 1
with open(file_name, 'rU') as f:  #opens PW file
    reader = csv.reader(f)
    # Print every value of every row. 
    for row in reader:
        for value in row: 
            print value

这是一种迭代数据的合理方式,并且应该为您添加所需的任何进一步逻辑提供坚实的基础。

于 2013-11-07T17:01:33.990 回答
2

这就是我打开 .csv 文件并将数据列作为 numpy 数组导入的方式 - 自然,您不需要 numpy 数组,但是......

data = {}

app = QApplication( sys.argv )
fname = unicode ( QFileDialog.getOpenFileName() )
app.quit()
filename = fname.strip('.csv') + ' for release.csv'

#open the file and skip the first two rows of data
imported_array = np.loadtxt(fname, delimiter=',', skiprows = 2)

data = {'time_s':imported_array[:,0]}
data['Speed_RPM'] = imported_array[:,1]
于 2013-11-07T15:00:46.500 回答
1

可以使用 pandas 库来完成。

import pandas as pd

df = pd.read_csv(filename)

list_of_lists = df.values.tolist()

这种方法适用于其他类型的数据,如 .tsv 等。

于 2020-11-25T15:02:02.937 回答