2017-12-18 188 views
1

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

/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
+2

后如果两个路径具有第二个将覆盖第一个。此外,它是可信的,不要自己做路径处理。 –

回答

2

使用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']}) 
+0

谢谢,现在我已经掌握了将所有行/路径变成字典!现在我需要思考,如何处理它们 - 如何搜索单个文件并获取它的路径。 – mcskrzypczak

相关问题