Строки TXT читаются как NoneType - PullRequest
1 голос
/ 20 июня 2019

Я использую python3, чтобы открыть текстовый файл в текущем каталоге и прочитать все строки.

Каждая строка в test.txt - это путь к изображению.

Моя цель - получить путь до расширения файла (что работает), но затем, когда я пытаюсь использовать объект path для объединения с другой строкой, python не распознает path как строковый объект даже после того, как я попробую конвертировать с str(). Скорее, он видит это как NoneType. Что я здесь не так делаю и что такое обходной путь?

with open("test.txt", "r") as ins:
    lines = ins.readlines()
    for line in lines:
        path = print(line.split('.')[0])
        print(type(path))

Выход:

/Users/admin/myfolder/IMG_1889
<class 'NoneType'>

with open("test.txt", "r") as ins:
    lines = ins.readlines()
    for line in lines:
        path = print(line.split('.')[0])
        print(str(path))

Выход:

/Users/admin/myfolder/IMG_1889
None

это то, что находится в файле:

$ cat test.txt
/Users/admin/myfolder/IMG_1901.jpg
/Users/admin/myfolder/IMG_1928.jpg
/Users/admin/myfolder/IMG_2831.jpg
/Users/admin/myfolder/IMG_1889.jpg
/Users/admin/myfolder/IMG_2749.jpg
/Users/admin/myfolder/IMG_1877.jpg

Ответы [ 2 ]

4 голосов
/ 20 июня 2019

Функция print() возвращает None. Вам нужно присвоить path результату разделения, а затем распечатать его.

with open("test.txt", "r") as ins:
    lines = ins.readlines()
    for line in lines:
        path = line.split('.')[0]
        print(path)
        print(type(path))

Однако для этой задачи вы должны использовать стандартную библиотеку (версия 3.4 +):

import pathlib

with open('test.txt', 'r') as ins:
    for path in (pathlib.Path(line) for line in ins):
        print(path.stem)
        print(type(path.stem))

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

3 голосов
/ 20 июня 2019

в строке

path = print(line.split('.')[0])

Вы присваиваете результат возврата print (который None).

вы можете использовать:

path = line.split('.')[0]
print(path)

и нет необходимости в строке lines = ins.readlines().

В целом, я предлагаю вам использовать

with open("test.txt", "r") as ins:
    for line in ins:
        path = line.split('.')[0]
        print(path)
        print(type(path))
...