文件名以及其作为字典的路径没有显示所有结果

我得到了与路径的文本文件,如:文件名以及其作为字典的路径没有显示所有结果

/path/to/file.ext

我需要这些路径分成字典所以key将排除路径文件和value - 文件名及其扩展名。我曾与下面的代码管理这样的:

base = {} 

with open ('text.txt') as f:

for line in f:

key,val = line.strip('\n').rsplit('/',1)

base[key] = val

我用.strip('\n')摆脱换行和.rsplit('/',1)基于路径中的最后/分裂我的整个路径。

该代码基本上正在工作,但是...它不处理整个txt文件。

处理9900+路径的文件,我得到了少于3000个元素(键+值)的基础。我检查了使用len(base)

  1. 所有的路径,使用bash find命令做出这样都OK。
  2. 路径名称不包含任何古怪的字符。
  3. 删除.strip('\n')不会改变任何内容。我使用Python 2.7.10。

回答:

使用os.path模块来处理目录。 假设有一行/path/to/file.ext,下面的代码

import os 

with open('test.txt') as f:

for line in f:

line = line.strip()

print(os.path.dirname(line))

print(os.path.basename(line))

输出

/path/to 

file.ext

现在,@威廉·Onsem在注释中解释文件,使用os.path.dirname为重点,将覆盖以前的路径文件在同一个目录中。为了解决这个问题,你需要使用列表作为值:

import os 

from collections import defaultdict

d = defaultdict(list)

with open('test.txt') as f:

for line in f:

line = line.strip()

d[os.path.dirname(line)].append(os.path.basename(line))

现在考虑:

/path/to/file1.ext 

/path/to/file2.ext

/path/to/file3.ext

/another/path/to/file4.ext

运行上面的代码,print(d)将输出

defaultdict(<class 'list'>, {'/path/to': ['file1.ext', 'file2.ext', 'file3.ext'], 

'/another/path/to': ['file4.ext']})

以上是 文件名以及其作为字典的路径没有显示所有结果 的全部内容, 来源链接: utcz.com/qa/263622.html

回到顶部