txt行读为NoneType

时间:2019-06-20 13:09:38

标签: python python-3.x string nonetype

我正在使用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 个答案:

答案 0 :(得分:4)

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可以避免此问题,并提供许多其他有用的功能。

答案 1 :(得分:3)

在线

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))