Как сохранить файл CSV по абсолютному пути, используя модуль CSV в Python? - PullRequest
0 голосов
/ 06 мая 2018

В настоящее время у меня есть программа, которая собирает данные из TXT-файлов в папке, а затем сохраняет эти данные в CSV-файл. Из-за того, как я планирую распространять эту программу, мне нужно, чтобы файл Python находился в папке, где находятся эти файлы .txt. Однако мне нужно, чтобы файлы .csv создавались по абсолютному пути, а не создавались в той же папке, что и скрипт Python и документы .txt. Вот то, что я сейчас написал,

def write_to_csv(journal_list):
    #writes a list of journal dictionaries to a csv file.
    import csv

    username = "Christian"  
    csv_name = username + ".csv" 

    myFile = open(csv_name, 'w')  
    with myFile:  
        myFields = ["filename", "username", "project_name", "file_path",
            "date", "start_time", "end_time", "length_of_revit_session",
            "os_version", "os_build", "revit_build", "revit_branch",
            "cpu_name", "cpu_clockspeed", "gpu_name", "ram_max", "ram_avg", "ram_peak",
            "sync_count", "sync_time_total", "sync_time_peak", "sync_time_avg",
            "commands_total", "commands_hotkey_percentage", "commands_unique",
            "commands_dynamo", "commands_escape_key", "commands_most_used"]
        writer = csv.DictWriter(myFile, fieldnames=myFields)    
        writer.writeheader()
        for item in journal_list:
            try:
                writer.writerow(item)
            except:
                print("error writing data to:", item)

Я ценю помощь.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Подумайте о том, чтобы запросить путь из сценария и установить значение по умолчанию, если оно не было передано. Это сделает ваш сценарий намного более гибким, чем кодированный в нем путь.

Вы можете использовать пакет click , который немного упрощает это.

import os
import click

def write_to_csv(path, journal_list):
    # .. your normal code
    file_path = os.path.join(path, '{}.csv'.format(username))
    # .. rest of your code here

@click.command()
@click.option('--output_dir', default='/home/foo/bar/', help='Default path to save files')
def main(output_dir):
   write_to_csv(output_dir)

if __name__ == '__main__':
   main()
0 голосов
/ 06 мая 2018

С помощью os.path.join () вы можете выбрать желаемый путь для записи вашего файла. Вот пример:

import os
desier_path = '/home/foo/'
file_path = os.path.join(dest_dir, csv_name)
with open(file_path, 'w'):
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...