Запись файла CSV из списка, но не все элементы отслеживают - PullRequest
0 голосов
/ 13 марта 2020

Я должен отформатировать данные из учебника в файл CSV. В учебнике мои данные уже разделены пробелом, поэтому я составляю список строк (некоторые содержат несколько данных, разделенных пробелом).

Когда я пытаюсь записать свой список в текстовый файл, он работает хорошо, но когда я пытаюсь записать его в CSV-файл, в середине строки запись останавливается и переходит к следующему элементу в моем списке , Не знаю, почему более половины моих данных не отслеживаются. Там нет символа конца строки или что-то еще.

Вот мой простой код

# importing libraries
import os

# defining location of parent folder
BASE_DIRECTORY = r'C:\Users\CAVC071777\Documents\1_Projet\Riverstart\Intrant EDPR\6-Background Harmonics Data at POI\test'

output_file = open('output.csv', 'w')
output = []
outputString = ""
file_list = []
i = 0
# scanning through sub folders
for (dirpath, dirnames, filenames) in os.walk(BASE_DIRECTORY):
    for f in filenames:
        if 'txt' in str(f):
            e = os.path.join(str(dirpath), str(f))
            file_list.append(e)
for f in file_list: 
    txtfile = open(f, 'r')
    i = 0
    for line in txtfile:
        if i == 3:
            outputString = "=Date(""{0}"",""{1}"",""{2}"")+TEMPS(""{3}"",""{4}"",""{5}"")".format(line[46:48],line[40:42],line[43:45],line[58:60],line[61:63],line[64:66])
        if i > 8 and i < 71:
            outputString += line[9:71]
        i = i + 1
    output.append(outputString)
    outputString = ""

for row in output:
    print(row)
    output_file.write(row + "\n")

Когда я открываю его в моем CSV-файле, все данные после 0,830% не отслеживаются: screenshot of string printed in terminal

Когда Я печатаю список строк, содержащих мои данные, в терминале, он хорошо отформатирован, и все мои данные там: screenshot of opened csv file

Текстовые файлы, которые я пытаюсь прочитать, выглядят так:

ET H

WHM1 SEL-735 Дата: 17.09.19 Время: 11: 46: 03.726 HDW Источник времени: ext

Основная частота = 60,0

Harmoni c IA IB I C IN VA VB V C

2 0,166% 0,137% 0,166% 0,000% 0,000% 0,020% 0,010%

3 ...... .. ....

И так далее до 60

изображение текстового файла, который я пытаюсь прочитать

1 Ответ

1 голос
/ 13 марта 2020

У вас есть две проблемы:

  1. Вы создаете файл, разделенный пробелами
  2. вы используете Excel

Известно, что Excel имеет очень плохая поддержка CSV-файлов. Короче говоря, вы читаете сборку CSV-файла из Excel в той же системе, и она будет работать без сбоев. Если вы читаете CSV-файл, специально созданный для вашей системы, он должен работать. В любом другом случае он может загружаться или не загружаться корректно ...

Здесь Excel ожидает, что разделитель будет ;, поскольку он является разделителем по умолчанию для французской локали, или ,, если вам удалось скажи это. Так как в строках их нет, он просто пытается поместить все в первую ячейку и заметно ограничивает длину одного поля.

Как исправить:

  1. использовать LibreOffice или OpenOffice. И то, и другое выходит далеко за пределы Excel почти для всех функций , за исключением CSV . Вы можете объявить во время загрузки, что разделитель является пробелом, и контролировать, что строки правильно анализируются
  2. Измените строки в файле CSV, чтобы использовать разделитель, который ваша версия Excel ожидает
...