Создать список списков из чтения текстового файла - PullRequest
1 голос
/ 24 апреля 2020

так что я пытаюсь автоматизировать утомительную задачу.

У меня есть этот test.txt, в котором указаны пути к некоторым PDF-файлам.

 "L:\Advertentie woningplattegronden\Definitieve plattegronden\Gemeente Delft\Complex 1004\Copy\1004A0Oa00 Jacob Gillishof 10.pdf"
"L:\Advertentie woningplattegronden\Definitieve plattegronden\Gemeente Delft\Complex 1004\Copy\1004A0Oa00 Jacob Gillishof 11.pdf"
"L:\Advertentie woningplattegronden\Definitieve plattegronden\Gemeente Delft\Complex 1004\Copy\1004A0Oa00 Jacob Gillishof 14.pdf"

что мне нужно, чтобы мой сценарий для шага 1 составлял список каждой строки, которую я сделал с:

with open('Test.txt') as f:
textlines = f.read().splitlines()
print(textlines)

, что приводит к:

[
    '"L:\\Advertentie woningplattegronden\\Definitieve plattegronden\\Gemeente Delft\\Complex 1004\\Copy\\1004A0Oa00 Jacob Gillishof 10.pdf"',
    '"L:\\Advertentie woningplattegronden\\Definitieve plattegronden\\Gemeente Delft\\Complex 1004\\Copy\\1004A0Oa00 Jacob Gillishof 11.pdf"',
    '"L:\\Advertentie woningplattegronden\\Definitieve plattegronden\\Gemeente Delft\\Complex 1004\\Copy\\1004A0Oa00 Jacob Gillishof 14.pdf"',
    "",
    "",
]

, хотя я не уверен, почему последние два объекта являются пустой строкой.

тогда я хочу создать еще один список, который перебирает список текстовых строк и разделяет все в \ из путей

Итак, я хочу список, содержащий:

some_list = [
    "L:",
    "Advertentie woningplattegronden",
    "Definitieve plattegronden",
    "Gemeente Delft",
    "Complex 1004",
    "Copy",
    "1004A0Oa00 Jacob Gillishof 10.pdf",
]

В конце концов я хочу иметь возможность поместить некоторые индексы из some_list в новая переменная, чтобы позже я смог создать файл (csv), содержащий эти переменные.

Каждый раз, когда я пытаюсь выполнить l oop через первый список, я получаю сообщение об ошибке, сообщающее, что индекс строки находится вне диапазона.

Между прочим, я не прошу готовых сценариев, но было бы неплохо получить некоторые инструкции по работе с этим сценарием.

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

Как то так, может быть? Я подправил некоторые полезные комментарии здесь и там.

filenames = []

with open("file.txt", "r") as file:
    for line in file:
        line = line.strip()  # remove any trailing/leading spaces
        line = line.strip('"')  # remove wrapping quotes
        if line:  # if there still is content...
            filenames.append(line)  # save the valid line.

filename_components = [
    filename.split("\\")  # Split the filename by backslashes
    for filename in filenames  # for each filename  # in the filenames we just stored
]

for split_name in filename_components:
    print(split_name)  # print out each split name

вывод, например,

['L:', 'Advertentie woningplattegronden', 'Definitieve plattegronden', 'Gemeente Delft', 'Complex 1004', 'Copy', '1004A0Oa00 Jacob Gillishof 10.pdf']
['L:', 'Advertentie woningplattegronden', 'Definitieve plattegronden', 'Gemeente Delft', 'Complex 1004', 'Copy', '1004A0Oa00 Jacob Gillishof 11.pdf']
['L:', 'Advertentie woningplattegronden', 'Definitieve plattegronden', 'Gemeente Delft', 'Complex 1004', 'Copy', '1004A0Oa00 Jacob Gillishof 14.pdf']
0 голосов
/ 24 апреля 2020

Во-первых, вам нужно немного почистить входы. Эти пустые строки, вероятно, являются пустыми строками в конце файла, поэтому вам придется их игнорировать. Также обратите внимание, что ваши строки заключены в двойные кавычки, что, вероятно, не то, что вы хотите. Вы можете удалить их с помощью .strip('"')

Наконец, я думаю, IndexError s, вероятно, возникли из-за попытки найти обратную косую черту sh в пустых строках, что заставляет меня думать, что вы вместо этого вручную ищете их использования сплита. Как сказал @Bernd, использование .split("\\") в каждой строке разрезает строку на все нужные вам фрагменты и возвращает список с ними.

0 голосов
/ 24 апреля 2020

Вы можете попробовать использовать .split ("\")

splittedLines = [l.split("\") for l in textlines]
...