Измените это:
csvFile = open('log.csv', 'w', newline='')
К этому:
csvFile = open('log.csv', 'w', newline='', encoding='utf8')
Так как
open()
используется для открытия CSV-файла для чтения, файл по умолчанию будет декодирован в unicode с использованием системного кодирования по умолчанию (см.locale.getpreferredencoding()
). Чтобы декодировать файл с использованием другой кодировки, используйте аргумент кодировки open:import csv with open('some.csv', newline='', encoding='utf-8') as f: reader = csv.reader(f) for row in reader: print(row)
То же самое относится к записи в чем-то отличном от системного по умолчанию кодирования: укажите аргумент кодирования при открытии выходного файла.
Я полагаю, что ваша системная кодировка по умолчанию не является
utf8
. Вы можете проверить это следующим образом:import locale locale.getpreferredencoding()
Надеюсь, что это поможет!
Есть идеи?
blockquote> blockquote>В
FILE-CONTROL
используйтеORGANIZATION LINE SEQUENTIAL
.При использовании
DATA DIVISION.
,FILE SECTION. FD OUTPUT-FILE. 01 OUTPUT-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 CONSTANT-TEXT-1 PIC X(5) VALUE "!---!". 01 CONSTANT-TEXT-2 PIC X(17) VALUE "This is a report!" 01 CONSTANT-TEXT-3 PIC X(28) VALUE "Here is the list of records:" 01 CONSTANT-TEXT-4 PIC X(17) VALUE "Number of crimes:". 01 PERSON-RECORD. 05 ID PIC 999. 05 NAME PIC X(10). 01 CRIMES. 05 NAME PIC X. 05 NO-OF-CRIME PIC 99.
В
PROCEDURE DIVISION
для операторовWRITE
используйтеWRITE OUTPUT-RECORD FROM CONSTANT-TEXT-1 WRITE OUTPUT-RECORD FROM CONSTANT-TEXT-2 WRITE OUTPUT-RECORD FROM CONSTANT-TEXT-3 WRITE OUTPUT-RECORD FROM CONSTANT-TEXT-4 WRITE OUTPUT-RECORD FROM PERSON-RECORD WRITE OUTPUT-RECORD FROM CRIMES
в любой последовательности, в которой вы хотите произвести отчет.
Вам не нужно использовать
CONSTANT-TEXT
, используйте любое имя, которое имеет значение для программы.