2012-06-20 3 views
3

У меня есть много каталогов с файлами в них. Я хочу, чтобы создать запятую TXT имени каталога файла, показывающие, и файлы, которые находятся в пределах конкретного каталога, смотрите пример ниже:Название каталога + имя файла в текстовый файл

Что я ищу:

DirName,Filename 
999,123.tif 
999,1234.tif 
999,abc.tif 
900,1236.tif 
900,xyz.tif 
...etc 

Питон коды ниже подталкивает список этих путей к файлу в текстовый файл, однако я не уверен, как отформатировать список, как описано выше.

Мой текущий код выглядит следующим образом:

Update

я смог отформатировать текстовый файл теперь, однако я заметил, все имена каталогов/имена файлов не записываются в текстовый файл. Он пишет ~ 4000 файлов ~ 8000 файлов. Есть ли какой-то лимит, который я достиг с текстовым файлом, числом строк, размером списка (mylist) или некоторым файлом dir/file, который его останавливает (см. Обновленный код ниже)?

from os import listdir 
from os.path import isfile, join 
root = r'C:\temp' 
mylist = ['2'] 
for path, subdirs, files in os.walk(root): 
    for name in files: 
      mylist.append(os.path.join(path, name)) 

txt = open(r'C:\temp\output.txt', 'w') 
txt.write('dir' + ',' + 'file' + '\n') 
for item in mylist: 
    list = mylist.pop(0) 
    dir, filename = os.path.basename(os.path.dirname(list)), os.path.basename(list) 
    txt.write(dir + ',' + filename + '\n') 

with open(r'C:\temp\output.txt', 'r') as f: 
    read_data = f.read() 

Спасибо

ответ

3

Может быть, это помогает:

Вы можете получить абсолютные пути к файлам, а затем выполните следующие действия

import os.path 
p = "/tmp/999/123.tif" 
dir, filename = os.path.basename(os.path.dirname(p)), os.path.basename(p) 

Результат:

In [21]: dir 
Out[21]: '999' 

In [22]: filename 
Out[22]: '123.tif' 

Также с onsider с помощью модуля csv для записи таких файлов.

import csv 
import os.path 

# You already have a list of absolute paths 
files = ["/tmp/999/123.tif"] 

# csv writer 
with open('/tmp/out.csv', 'wb') as out_file: 
    csv_writer = csv.writer(out_file, delimiter=',') 
    csv_writer.writerow(('DirName','Filename')) 
    for f in files: 
     csv_writer.writerow((os.path.basename(os.path.dirname(f)), 
          os.path.basename(f))) 
+0

под вашим фрагментом csv, должны ли быть файлами? Если это так, я получаю сообщение об ошибке, которое говорит, что не может конкатенировать «str» и «list». – artwork21

+0

Извините @ artwork21, теперь он исправлен, 'p' был действительно' f' (текущий путь к файлу) –

+0

Отлично, спасибо! – artwork21

Смежные вопросы