У меня есть сценарий, который должен читать в указанном пользователем 2-столбце csv-файле, расположенном в том же каталоге, выполнять некоторые математические данные и выводить результаты на stdout который является другим определяемым пользователем CSV-файлом. Я сделал это в 2.7.5, но теперь, вернувшись к 3.2, он не работает. Не шоком, которого я знаю, но я довольно неопытен в программировании, и у меня возникли проблемы с разработкой, как заставить его работать на Python 3.Указанное пользователем чтение и печать csv в Python 3
Я отменил код на его основные элементы для чтения и печати, которые использовали чтобы работать, и он все еще не работает в 3.2, несмотря на то, что он делает некоторые из более очевидных изменений, он просто застревает и никогда не печатает в новый файл. Я попытался использовать 2to3.py, но это порождает плохой ввод parseerror и никаких изменений не сделано! Я бы предпочел узнать, почему это сейчас не работает.
Тип команды, которой я хочу;
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()
Очевидно Принт Теперь функция, осуждается 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, но я не могу найти примеры использования его в пользовательских файлах из командной строки, например, как мне это нужно, все примеры, которые я могу найти, определяют файл, который нужно открыть в самом скрипте.
Заранее спасибо.
Спасибо, что выглядит очень много больше похоже на то, как это должно быть сделано! Однако я не могу заставить этот код работать. Если я не использую argparse и не изменяю объект в io.open() для определенного имени файла, это работает нормально, но когда я использую, как описано выше, я получаю «ошибка: несколько аргументов» при использовании команды в командной строке в формат, который я дал выше. Он должен работать так же, как и для состояний использования. На самом деле, как бы я ни старался, он, похоже, не распознает входной файл, который я вызываю. Как вы можете вызвать входной файл в команде для этого? – kodasik
Вам не нужно ничего менять, просто сохраните его на 'myscript.py' и назовите его, как вы заявили в своем вопросе:' python myscript.py inputdata.csv> outputdata.csv' –
Спасибо, после некоторых игр о I просто нашел это тоже. Это не совсем то, что я сказал. Со старым кодом я бы сменил каталог на местоположение моего скрипта и csv, 'CD C: \ somedirectory' и набрал команду' myscript inputdata.csv> outputdata.csv'. Теперь мне нужно указать «python» и расширение скрипта python, а не то, что я искал, но по крайней мере теперь он работает! – kodasik