Аргумент Python для записи в другой файл

Я новичок в Python и надеюсь получить некоторую помощь в переводе моего псевдокода в реальный код. В настоящее время у меня есть скрипт Python, который выполняет следующее:

  1. Читает в файл журнала
  2. Создает двумерный массив временных меток из файла журнала
  3. Открывает файл данных
  4. Сравнивает отметки времени (первый столбец), и, если значение IN или между значениями в 2D-массиве, отметьте «1» в последнем столбце файла данных. Если нет, отметьте 0.

Я хочу настроить аргумент командной строки, который является необязательным, но, если он задан, вместо этого будет записывать 0 или 1 в выходной файл с именем «output.csv», а не в файл данных.

В настоящее время создается output.csv, но не только с классификацией 1 или 0. По сути, он перезаписывает весь файл data.csv (который читается) в output.csv (который должен быть записан)

Я новичок в Python и надеюсь получить некоторую помощь в переводе моего псевдокода в реальный код. В настоящее время у меня есть скрипт Python, который выполняет следующее:

  1. Читает в файл журнала
  2. Создает двумерный массив временных меток из файла журнала
  3. Открывает файл данных
  4. Сравнивает отметки времени (первый столбец), и, если значение IN или между значениями в 2D-массиве, отметьте «1» в последнем столбце файла данных. Если нет, отметьте 0.

Я хочу настроить аргумент командной строки, который является необязательным, но, если он задан, вместо этого будет записывать 0 или 1 в выходной файл с именем «output.csv», а не в файл данных.

Как я могу отредактировать мой текущий скрипт, чтобы не перезаписывать весь файл data.csv, а только индикатор isBad 0 или 1?

import re
import csv
import codecs
import argparse

#Configuring arguments and variables
################################################

parser = argparse.ArgumentParser(description='This script is used to automatically classify the workbench operations. If the operation was performed by a human, it will be marked appropriately. If it was done by a machine, it will be marked appropriately.')
parser.add_argument('-d', '--data', required=True, help='The data.csv produced by the workbench')
parser.add_argument('-r', '--log', required=True, help='The log file used to appropriately label the data')
parser.add_argument('-n', '--new', required=False, help='Flag to create output.csv of markings instead of marking data.csv', action = "store_true")
args = parser.parse_args()

if (args.new):
        print("You selected to create a new log")

print('data.csv:', args.data)
print('log:', args.log)

filepath = args.log
csv_filepath = args.data

tempStart = ''
tempEnd = ''

################################################

print("                                ")
print("Starting Script")
print("                                ")

#open the log
with open(filepath) as myFile:
    #read the log
    all_logs = myFile.read()
myFile.close()

#Create regular expressions
starting_regex = re.compile(r'\[(\d+)\s+s\]\s+Initializing\s+Workbench')
ending_regex = re.compile(r'\[(\d+)\s+s\]\s+Log\s+File\s+Completed.\s+Stopping!')

#Create arrays of start and end times
start_times = list(map(int, starting_regex.findall(all_logs)))
end_times = list(map(int, ending_regex.findall(all_logs)))

#Create 2d Array
timeArray = list(map(list, zip(start_times, end_times)))

#Print 2d Array
print(timeArray)

print("                                ")
print("Completed timeArray construction")
print("                                ")

#Open the csv file as a reader
with open(csv_filepath, 'rb') as csvfile:
    reader = csv.reader(codecs.iterdecode(csvfile, 'utf-8'))
    input_rows = [row for row in reader]


#Open the csv file as a writer
with open('output.csv', 'w') as outputfile:
    writer = csv.writer(outputfile)

    # loop through the rows, set the currVal to the value of the first column (timestamp)
    for row in input_rows:
        currVal = int(row[0])
        isBad = '0'

        for interval in timeArray:
            if interval[0] <= currVal <= interval[1]:
                isBad = '1'
                break

        writer.writerow(row + [isBad])

print("Script completed")

Также для создания нового файла: stackoverflow.com/questions/48959098/…

SPYBUG96 03.12.2018 17:54

Спасибо за ваш отзыв, SPYBUG96. Я думаю, что ответ может быть принят как объединение двух ваших комментариев, но я считаю, что это не дубликат, поскольку конкретное приложение здесь уникально для обеих ссылок.

artemis 03.12.2018 17:59

Сделайте new-log аргументом store_true. Его значение по умолчанию будет False, а если задано - True. Как написано, для него требуется аргумент со значением по умолчанию None.

hpaulj 03.12.2018 18:31

При отладке приложений argparse рекомендуется использовать print(args), чтобы точно видеть, что синтаксический анализатор произвел для различных входных данных. Таким образом, вы не будете гадать, когда попытаетесь использовать args в своем коде.

hpaulj 03.12.2018 18:33

@hpaulj, забавно, что ты их прокомментировал. Я ПРОСТО добавил это в аргументе (store_true) на основе: docs.python.org/3/howto/argparse.html

artemis 03.12.2018 18:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После достаточной отладки я нашел строку, которую нужно было изменить.
writer.writerow(row + [isBad]) должен был быть writer.writerow([isBad])

Другие вопросы по теме