清理代码或找到更有效的方法来编写一些代码。

时间:2016-04-04 19:59:45

标签: python

我希望看看能否找到一种更有效的方式来写这个。 csv阅读器的问题在于,当您将输出写入标准输出时,它会在其周围抛出额外的单引号。将引号更改为无效并没有帮助,因为它没有保留格式。

此代码有效,但我觉得我可以更高效地完成它。我是python和编程的新手。

import csv
import sys

def printString(x):
    print x[0] + ",", x[1] + ",", x[2] + ",", x[3] + ","

with open(sys.argv[1],"rb") as inputFile:
    csvInput = csv.reader(inputFile, delimiter=',')
    header = next(csvInput)
    sort = sorted(csvInput, key=lambda x:float(x[3]))

printString(header)
for i in sort:
   printString(i)

4 个答案:

答案 0 :(得分:1)

使用这种方式:

def printString(x):
    for field in x:
        print "{0},".format(field)

答案 1 :(得分:1)

阅读Understanding repr( ) function in Python,它适用于您的" csv输出":csv.reader生成字符串列表作为行。当您按原样将列表传递给print语句时,它会打印其repr表示形式:

>>> print ["f1", "f2", "f3", "f4"]
['f1', 'f2', 'f3', 'f4']

在这种情况下,打印功能会派上用场:

from __future__ import print_function

for row in sort:
    print(*row, sep=", ")

使用前面的例子:

>>> print(*["f1", "f2", "f3", "f4"], sep=", ")
f1, f2, f3, f4

此上下文中的星号unpacks the list as positional arguments可以打印。

答案 2 :(得分:0)

我查看string.join函数 - 您可以通过提供要用作分隔符的字符串(在本例中为逗号),在其上调用.join,然后使用它来使用它传入值数组(在本例中,来自csvreader的值。

>>> x = ['1.0', '2.0', '3.0']
>>> ','.join(x)
1.0,2.0,3.0

警告 - join要求数组中的值只是字符串(所以如果你想进行任何转换为​​ints / floats进行处理,那么你可能想看看这里提供的其他选项

答案 3 :(得分:0)

感谢您的帮助,以下是我决定使用的内容。

import csv
import sys

try:
    with open(sys.argv[1],"rb") as inputFile:
        csvInput = csv.reader(inputFile, delimiter=',')
        header = next(csvInput)
        sort = sorted(csvInput, key=lambda x:float(x[3]))
    print(','.join(header))
    for i in sort:
        print(','.join(i))

except:
    print("Please input a csv file  to sort, example: './dataSort.py csvFile.csv'" + \
                " the 4th column of the csv file needs to be a float or int variable.")