【问题标题】:Building list of lists from CSV file从 CSV 文件构建列表列表
【发布时间】:2013-11-19 05:49:06
【问题描述】:

我有一个要解析的 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 循环。我希望能够阅读每一行,现在只需打印它们。

【问题讨论】:

  • 您可以发布您已有的任何代码吗?即使尝试失败 - 包含有问题的代码也会更有帮助。
  • 查看 python 的 csv 库或 tablib 并试一试。
  • 还有什么方法可以在 CSV 文件中使用逗号作为分隔符?它只是使其遵循默认设置,这可能是您面临的问题。此外,完全对您不起作用,即问题是什么?
  • 现在发布代码。 csv 确实使用逗号作为分隔符。我只是使用标签来显示保存 csv 文件的格式。
  • 您是否考虑过直接使用 excel 文件?您可以通过使用 Python Excel 模块 (python-excel.org) 来完成此操作,这样您就不必担心处理 csv

标签: python list csv


【解决方案1】:

可以使用 pandas 库来完成。

import pandas as pd

df = pd.read_csv(filename)

list_of_lists = df.values.tolist()

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

【讨论】:

    【解决方案2】:

    这应该会让你走上正轨:

    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
    

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

    【讨论】:

    • 模式 U3.4 以来已弃用,并将在 4.0 中删除。参考here
    • 您不需要列表理解。 data = list(csv.reader(f, delimiter=',')) 很多(每一行已经是一个列表)。
    【解决方案3】:

    这就是我打开 .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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2023-03-22
      • 2015-09-16
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多