我希望看看能否找到一种更有效的方式来写这个。 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)
答案 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.")