2013-09-20 4 views
1

Извините, но я не знаю, как использовать язык python.Чтение и запись файлов на заказ - Python

Итак, у меня есть 5 файлов, которые можно сказать. item1.txt, item2.txt, item3.txt, item4.txt и item5.txt. Я пытаюсь вызвать каталог, чтобы он отобразил первый файл (item1.txt) и распечатал его содержимое, а затем, когда я снова вызываю эту функцию (item2.txt), и ее содержимое в файле будет напечатано. затем (item3.txt) и затем (item4.txt).

Порядок важен, и система должна знать, какой файл был напечатан, чтобы следующий файл в строке мог печатать после первого, например. содержимое item1.txt сначала печатает, а затем item2.txt.

Попытка использовать:

for infile in sorted(glob.glob('*.txt')): 
    print "Current File Being Processed is: " + infile 

Но проблема в том, каталог должен быть добавлен, и система должна знать, какой файл и его содержание было отпечатано до него.

Извините, если это сбивает с толку.

Помогите оценить.

ответ

0

Это то, что вы ищете?

import glob 
path = "path/to/your/txt/files/" 
for infile in sorted(glob.glob(path + '*.txt')): 
    print("Current File Being Processed is: " + path + infile) 
+1

Наверное, нет. Он ищет имена файлов 'files * .txt' в относительном пути' path/to/your/txt', и, если он найдет какой-либо файл, он выведет 'путь/в/your/txt/filesfilesfoo.txt'. И это именно то, что вы используете 'os.path' вместо строковых функций, потому что невозможно создать глупые ошибки, подобные тем, которые вы создали здесь. – abarnert

+0

@abarnert: Это был тип, и да, os.path может быть лучше. Отредактировал мой ответ. –

+0

Это моя точка зрения. Тот факт, что вы использовали код, который вызывает большие, а иногда и трудно отлаживаемые проблемы, если вы делаете такую ​​же простую опечатку, которую мы все делаем все время, гораздо важнее, чем тот факт, что вы столкнулись с убедитесь, что опечатка. – abarnert

0

Вы можете использовать os.path.join, если вам нужно знать полный путь.

Например, скрипт, который ищет все файлы в текущем каталоге будет выглядеть следующим образом:

import os 
import os.path 
import re 


# look for all files in current working directory, including subdirs 
for (root, folders, files) in os.walk(os.getcwd()):  
    for file in files: 
     fullpath = os.path.join(root, file) 
     print(fullpath) 

Надеется, что это помогает.

+0

Показать «os.path.join» приятно, но я думаю, что добавление 'os.walk' будет путать вещи для новичка, который был доволен' glob'. – abarnert

0

Но проблема в том, каталог должен быть добавлен ...

Чтобы сделать это, используйте методы в os.path.

Вы можете сделать pwd = os.getcwd(), чтобы получить текущий рабочий каталог (тот же каталог, что и glob('*.txt')), а затем у нас os.path.join(pwd, infile). Но для частного случая, когда у вас есть только путь, относящийся к текущему каталогу, вы, вероятно, захотите, это os.path.abspath. Итак:

for infile in sorted(glob.glob('*.txt')): 
    inpath = os.path.abspath(infile) 
    print "Current File Being Processed is: " + inpath 

и система должна знать, какой файл и его содержание было отпечатано до него.

Чтобы получить содержимое файла, вы должны open его, то read от него, как это:

for infile in sorted(glob.glob('*.txt')): 
    inpath = os.path.abspath(infile) 
    print "Current File Being Processed is: " + inpath 
    with open(inpath) as infileobj: 
     contents = infileobj.read() 
    print contents 

Часто, вы действительно не хотите, чтобы прочитать весь файл в одну Большая строка, вы просто хотите сделать некоторую работу над каждой строкой в ​​файле.Для этого, вы можете просто использовать for заявление, так же, как вы делали со списком строк, вернувшегося из sorted, чтобы обработать файл как набор строк:

for infile in sorted(glob.glob('*.txt')): 
    inpath = os.path.abspath(infile) 
    print "Current File Being Processed is: " + inpath 
    with open(inpath) as infileobj: 
     for line in infileobj: 
      print line.rstrip('\n') 

(rstrip('\n') происходит потому, что каждый строка заканчивается новой строкой, но print добавляет свою собственную новую строку, и вам не нужна пустая строка между каждой строкой файла.)

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

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