【问题标题】:How do I put all my looped output in a variable (for generating an output file)? (CSV related)如何将所有循环输出放入变量中(用于生成输出文件)? (CSV 相关)
【发布时间】:2016-02-24 09:59:07
【问题描述】:

我对使用 python 很陌生,所以我希望你能在这里帮助我。我必须编写一个程序来打开一个 csv 文件,读取它并让你通过输入数字来选择你想要的列。这些必须放在一个新文件中。问题是:在输入我想要的列并将“X”启动主要部分之后,它会生成我想要的内容,但是通过使用循环,而不是打印包含它的变量。但是对于 csv-writer 我需要一个包含它的变量。有任何想法吗?在这里你有我的代码,有问题随时问。 csvfile 就像:

john, smith, 37, blue, michigan
tom, miller, 25, orange, new york
jack, o'neill, 40, green, Colorado Springs
...etc

代码是:

import csv

with open("test.csv","r") as t:
    t_read = csv.reader(t, delimiter=",")
    t_list = []
    max_row = 0
    for row in t_read:
        if len(row) != 0:
            if max_row < len(row):
                max_row = len(row)
            t_list = t_list + [row] 
            print([row], sep = "\n")
    twrite = csv.writer(t, delimiter = ",")
    tout = []
    counter = 0
    matrix = []
    for i in range(len(t_list)):
        matrix.append([])
    print(len(t_list), max_row, len(matrix), "Rows / Columns / Matrix Dimension")
eingabe = input("Enter column number you need or X to start generating output: ")
nr = int(eingabe)
while type(nr) == int:
    colNr = nr-1
    if max_row > colNr and colNr >= 0:
        nr = int(nr)
        # print (type(nr))
        for i in range(len(t_list)):            
            row_A=t_list[i]            
            matrix[i].append(row_A[int(colNr)])
            print(row_A[int(colNr)])
        counter = counter +1
        matrix.append([])
    else:
        print("ERROR")

    nr = input("Enter column number you need or X to start generating output: ")

    if nr == "x":
        print("\n"+"Generating Output... "  + "\n")        
        for row in matrix:
    # Loop over columns.           
            for column in row:     
                print(column + " ", end="")
            print(end="\n")

    else:
        nr = int(nr)

print("\n")


t.close()

【问题讨论】:

    标签: python csv variables output


    【解决方案1】:

    嗯,您拥有 matrix 所需的一切,除了添加不需要的行的错误行:

        counter = counter +1
        matrix.append([])   # <= remove this line
    else:
        print("ERROR")
    

    然后你可以简单地做:

    if nr == "x":
        print("\n"+"Generating Output... "  + "\n")        
        with open("testout.csv", "w") as out:
            wr = csv.writer(out, delimiter=",")
            wr.writerows(matrix)
    

    【讨论】:

    • 好的,谢谢。效果很好。我不得不把线路留在 thug 里面,但它现在可以正常工作了。谢谢!
    • 嗨,还有一个问题。什么是使它外壳可执行的好方法?比如:csv-columns.py anotherFile.csv 1 2 4 ?
    • 看起来是一个非常不同的问题...两个提示:添加#!/usr/bin/env python 作为第一行(在类Unix 系统下)并使用sys.argv 读取命令行参数。如果你需要更多,你应该问另一个问题。
    • 谢谢!我会努力实现它。 sys.argv 是我自己发现的,但没有按我想要的方式工作。可能做错了什么;)
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多