Аргумент Python для записи в другой файл - PullRequest
0 голосов
/ 03 декабря 2018

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

  1. Читает в файле журнала
  2. Создает 2D-массив временных меток из файла журнала
  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")

1 Ответ

0 голосов
/ 04 декабря 2018

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

...