ошибка при записи в CSV-файл с python - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь записать вывод в файл csv построчно

Вот что я пробовал:

import csv

today = datetime.datetime.now().date()
filter = "eventTimestamp ge {}".format(today)
select = ",".join([
    "eventTimestamp",
    "eventName",
    "operationName",
    "resourceGroupName",
])

activity_logs = client.activity_logs.list(
    filter=filter,
    select=select
)   

with open(r"C:\scripts\logs.csv", 'w', newline='') as f:
    for log in activity_logs:
        result = (" ".join([
            str(log.event_timestamp),
            str(log.resource_group_name),
            log.event_name.localized_value,
            log.operation_name.localized_value
        ]))
        f.writerow(result)

Ошибка выдачи:

AttributeError: '_io.TextIOWrapper' object has no attribute 'writerow'

Как могу ли я исправить эту ошибку, возможно, любым другим модулем?

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

Это:

with open(r"C:\scripts\logs.csv", 'w', newline='') as f:

создает просто дескриптор текстового файла. Вам нужно создать csv.writer, используя f, а затем вы можете использовать writerow, то есть:

import csv
...
with open(r"C:\scripts\logs.csv", 'w', newline='') as f:
    writer = csv.writer(f)
    for log in activity_logs:
        result = (str(log.event_timestamp),str(log.resource_group_name),log.event_name.localized_value,log.operation_name.localized_value)
        writer.writerow(result)

Вы можете найти полезные примеры использования в статье csv на PyMOTW-3

1 голос
/ 04 августа 2020

CSV.writer требуется, когда вы пытаетесь писать в CSV. тогда код может быть

import csv

today = datetime.datetime.now().date()
filter = "eventTimestamp ge {}".format(today)
select = ",".join([
    "eventTimestamp",
    "eventName",
    "operationName",
    "resourceGroupName",
])

activity_logs = client.activity_logs.list(
    filter=filter,
    select=select
)   

with open(r"C:\scripts\logs.csv", 'w', newline='') as file:
    f=csv.writer(file)
    for log in activity_logs:
        result = (str(log.event_timestamp),
            str(log.resource_group_name),
            log.event_name.localized_value,
            log.operation_name.localized_value)
        f.writerow(result)

Когда csv.writer добавляется после открытия файла csv, он будет работать без ошибки TextIOwrapper

1 голос
/ 04 августа 2020

Ошибка исходит из строки:

f.writerow(result)

и сообщает вам, что объект f не имеет функции с именем writerow.

Как Яннес добавил комментарий, используйте вместо этого функцию записи:

f.write(result)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...