2015-10-17 3 views
0

Я создал программу Python, которая проверяет файлы в папке и возвращает список тех, которые заканчиваются на .txt. Теперь я хочу вывести это в файл. Вот мой код:Печать вывода, который представляет собой список имен файлов, в текстовый файл

import os 
import os.path 
import sys 

f=open("E:\\test.txt",'w') 
f.write('') 

path=os.path.abspath("E:\\test") 
def print_result(): 
    print(name) 
for root, dirs, files in os.walk(path): 
    for name in files: 
     if name.endswith(".txt"): 
      print_result() 

Version 1: 

alist=[print_name]    
alist.append(print_result) 
f=open("E:\\test.txt", 'a') 
f.writelines(alist) 

Version 2: 

alist=name 
alist.append(name) 
f = open("E:\\test.txt",'a') 
print (name) 

Version 3: 

frame=print_result 
saveout = sys.stdout 
fsock = open("E:\\test.txt", 'a') 
sys.stdout = fsock 
print (frame) 
sys.stdout = saveout`enter code here` 

As you can see i have tried diferent types. The thing is that i only get the following in the file, instead of the actual output list: 

<function print_result at 0x004F6DB0> 
+1

Почему вы определяете функцию 'print_result', которая ничего не делает, кроме печати? Просто 'print (name)' вместо 'print_result()'. Просмотрели ли вы какой-либо учебник или документацию для ввода-вывода файлов? Все они помогут вам в этой основной задаче. – TigerhawkT3

ответ

0

Для доступа к файлам * .txt в текущем рабочем каталоге, а также в любых подкаталогах, рекурсивно, что, как я думаю, вы пытались достичь с помощью os.walk() ссылки, попробуйте следующее:

import os 
def GetFiles(dir,f): 
    basedir = dir 
    subdirs = [] 
    for fname in os.listdir(dir): 
     fileName = os.path.join(basedir, fname) 
     if os.path.isfile(fileName): 
      if fileName.endswith(".txt"): 
       f.write(fileName+"\n") 
       print fileName 
     elif os.path.isdir(fileName): 
      subdirs.append(fileName) 
    for subdir in subdirs: 
     GetFiles(subdir,f) 
f=open("test.txt",'w') 
GetFiles('./',f) 
f.close() 

Это будет список файлов, оканчивающиеся на «.txt» в текущем рабочем каталоге и всех вложенных каталогов, помещая путь и имя-файла в файле test.txt

0

Это можно сделать немного проще с помощью glob:

import glob 

txtfiles = glob.glob('E:\\test\\*.txt') 
with open('E:\\test.txt', 'w') as f: 
    for txtfile in txtfiles: 
     f.write('{}\n'.format(txtfile)) 
+0

Спасибо. Это сработало !!! –

+1

Я ценю, что OP согласился с тем, что это работает, но исходный код использовал 'os.walk()', поэтому использование 'glob' не приведет к тем же результатам, что и не будет копаться в подкаталогах. –

+0

Это хороший момент. –

0

Вы должны получить все файлы в каталоге

предполагаю, что вы есть путь к каталогу: «/ home/ubuntu/test» и вы хотите записать результат в файл ». .txt»

from os import listdir 
from os.path import isfile, join 

onlyfiles = [ f for f in listdir("/home/ubuntu/test") if isfile(join("/home/ubuntu/test",f)) ] 

with open ("/home/ubuntu/result.txt","w")as fp: 
    for line in onlyfiles: 
    fp.write(line+"\n") 

Затем получил "/ Главная/Ubuntu /" и открытый Result.txt. Вы будете указывать имена файлов

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