【发布时间】:2013-08-17 20:43:37
【问题描述】:
我有一个脚本,它应该读取位于同一目录中的用户指定的 2 列 csv 文件,对数据进行一些数学运算,然后将结果打印到另一个用户定义的 csv 文件 stdout。我在 2.7.5 中制作了它,但现在终于移到了 3.2,它不起作用。我知道这并不令人震惊,但我在编程方面相当缺乏经验,而且我无法弄清楚如何让它在 Python 3 中工作。
我已将代码剥离为过去可以工作的基本阅读和打印元素,尽管做了一些更明显的修改,但它仍然无法在 3.2 中工作,它只是卡住了,从不打印到新文件.我曾尝试使用 2to3.py 但它会引发错误的输入解析错误并且没有进行任何更改!我宁愿确切地了解为什么它现在不管用了。
我想要的命令类型是;
somedirectory>myscript inputdata.csv > outputdata.csv
这是 Python 2.7.5 脚本的精简版,它可以运行,因此您可以看到我在做什么,(我已保留所有导入)
import fileinput, math, sys, numpy as np
from numpy import linspace, loadtxt, ones, convolve
from optparse import OptionParser
def main():
parser = OptionParser()
options,args = parser.parse_args()
try:
data = [(line.rstrip()).split(',') for line in fileinput.input(args)]
except IOError as detail:
print >> sys.stderr, detail
sys.exit(2)
'''kept these lines in just to make sure the data is in the same format as when it worked before'''
t = [float(row[0]) for row in data]
m = [float(row[1]) for row in data]
result = [[a,b] for a,b in zip(t, m)]
for line in result:
print >> sys.stdout, str(line[0]) + ',' + str(line[1])
options = 0
if __name__ == "__main__":
main()
显然 Print 现在是一个函数,不推荐使用的 Optparse 可以转换为 Argparse 等
所以我认为这样就可以了,
import fileinput, math, sys, inspect, numpy as np
from numpy import linspace, loadtxt, ones, convolve
from argparse import ArgumentParser
def main():
parser = ArgumentParser()
options,args = parser.parse_args()
try:
data = [(line.rstrip()).split(',') for line in fileinput.input(args)]
except IOError as detail:
print(detail, file=sys.stderr)
sys.exit(2)
'''kept these lines in just to make sure the data is in the same format as when it worked before'''
t = [float(row[0]) for row in data]
m = [float(row[1]) for row in data]
result = [[a,b] for a,b in zip(t, m)]
for line in result:
print(str(line[0]) + ',' + str(line[1]), file=sys.stdout)
options = 0
if __name__ == "__main__":
main()
这可能存在一些明显的问题,但在研究了所有元素之后,我被困在它到底在哪里崩溃了。
此外,可能还有更好的方法来读取和写入这种类型的 csv 文件,我只是坚持这样做,因为我知道它确实 工作。例如,我知道 csv 模块,但我找不到任何从命令行在用户指定的文件上使用它的示例,比如我需要它,我能找到的所有示例都定义了要在脚本本身中打开的文件。
提前谢谢你。
【问题讨论】:
标签: python csv python-3.x