У меня есть скрипт на Python без функций. На данный момент он принимает входные данные file1.txt и выводит строку с результатами вычислений, т.е.

file1.txt 12 16.0 True

Я хотел бы пробежать десятки текстовых файлов и записать эти строки в файл CSV, строка за строкой.

Добавляет ли каждый вывод в список, а затем анализирует список? Такое чувство, что вы должны написать функцию, которая будет принимать каждый вход и выводить вычисления непосредственно в файл CSV.

Как мне принимать входные данные при каждом запуске скрипта, например, имя файла, результат данных, результат данных 2, логический результат и запишите его в файл, используя {{Х0}} ?

import csv
import sys

f = open(sys.argv[1], 'wt')
try:
    writer = csv.writer(f)
    writer.writerow( ('Filename', 'data', 'data', 'Boolean' )
    writer.writerow( % (f, ..., ..., str(...) )
finally:
    f.close()

print open(sys.argv[1], 'rt').read()
0
ShanZhengYang 14 Дек 2015 в 20:04

3 ответа

Лучший ответ

Вы можете получить список ваших аргументов из sys.argv

arg_list = sys.argv[1:]

А затем создать цикл после создания писателя

  f = open(sys.argv[1], 'wt') arg_list = sys.argv[1:] 
  try:
        writer = csv.writer(f)
        writer.writerow( ('Filename', 'data', 'data', 'Boolean' )
        for arg in arg_list:
          writer.writerow( % (f, ..., ..., str(...) ) # your row
  finally:
        f.close()

  print open(sys.argv[1], 'rt').read()

Между тем, если вам нужна одна строка для записи в CSV, код будет

f = open(sys.argv[1], 'wt')
try:
    writer = csv.writer(f)
    writer.writerow( ('Filename', 'data', 'data', 'Boolean' )
    writer.writerow(sys.argv[2], sys.argv[3], sys.argv[4])
finally:
    f.close()

print open(sys.argv[1], 'rt').read()
1
marco carminati 14 Дек 2015 в 17:24

Я подозреваю, что вы хотите вызвать уже существующий скрипт Python из другого скрипта, поймать его результаты и вставить их в свой CSV.

На самом деле, вы должны подумать о переписывании вашего первого скрипта Python и обернуть его функциональность в функцию, которая принимает имя файла в качестве аргумента и возвращает соответствующие результаты:

def do_stuff(thefile):
    # Perform activity here
    return (a, b, c)

Затем выполните итерацию ваших текстовых файлов (или используйте map) и соберите результаты.

Если вы действительно хотите придерживаться вызова одного скрипта из другого (подумайте дважды!), Что совершенно не то, что вам следует делать, вы можете прочитать далее subprocess.call() или os.system() , Я не буду приводить пример здесь, чтобы не поддерживать этот подход.

0
jbndlr 14 Дек 2015 в 17:24

У меня недостаточно высокая репутация, чтобы комментировать. Просто хотел уточнить, если вы предполагаете читать из папки. Если да, то почему бы вам не запустить цикл и сохранить результаты в кадре / списке данных, а затем записать это в CSV. Дайте мне знать, если этот подход работает с вами, и я могу написать код.

0
everestbaker 14 Дек 2015 в 17:13