2013-04-11 3 views
-4

Я очень новичок в python. Я хочу читать файлы на основе имени файла, а не типа данных. Скажем, что у меня есть Hello.txt_1, Hello.txt_2, Hello.txt_3 в папке, и эти файлы создаются автоматически внешним кодом с последним файлом Hello.txt_3. Теперь я хочу прочитать последний созданный файл Hello.txt_3 и проверить его содержимое. Как это сделать в python? Я выяснил файлы с общим типом данных, но не для общего имени файла.Чтение файлов на основе имени файла, а не типа данных

+0

'os.path.mtime' будет иметь значение здесь. – squiguy

+0

http://stackoverflow.com/questions/120656/directory-listing-in-python для получения списка файлов – Vorsprung

+0

@squiguy Он, вероятно, хочет 'ctime', а не' mtime' –

ответ

1

Используйте glob для выполнения подстановочных знаков. В следующем примере будут найдены все файлы с именем, указанным вами, и last_file будет содержать имя последнего по времени создания (или None, если файлы не найдены).

import glob 
import os 

last_file = None 
time=0 
for i in glob.glob("Hello.txt_*"): 
    if os.path.getctime(i) > time: 
     last_file = i 

PS: Этот вопрос находится на уровне самого новичка и должен быть легко решен путем поиска в Интернете.

+0

Большое спасибо. Когда я редактировал ваш код следующим образом, он правильно дал мне последний созданный файл. – user2269123

+0

импорт Глоб импорт ОС last_file = None время = 0 для г в glob.glob ("Hello.txt_ *"): если os.path.getctime (I)> Время: last_file = я время = last_file print last_file – user2269123

+0

@Jon Clements: Большое спасибо. Я достиг своей цели с последующим добавлением этих строк – user2269123

0

Из моего понимания вопроса вы, вероятно, захотите проигнорировать типы файлов, поскольку вы не можете зависеть от них, чтобы рассказать вам, что вы хотите знать. Если тип файла содержит число/альфа-число, сортировка сортируется в обратном порядке. Тогда вы можете просто прочитать первый:

#!/usr/bin/python 
from os import listdir 
from os.path import isfile, join 

#this is where you declare you directory 
directory_2_look = '/var/tmp/lee/' 

#This creates a list of the contents of your directory 
files = [ f for f in listdir(directory_2_look) if isfile(join(directory_2_look,f)) ] 

#this sorts the files for you in reverse order 
files = sorted(files, reverse=True) 
print files[0] 

#this allows you to read the last file and print it out. If you want to write to it simply change the 'r' 
file_to_read = open(join(directory_2_look,files[0]), 'r') 

print file_to_read.read() 

Результаты будут выглядеть немного так:

[ 'script.py', 'file.txt_99', 'file.txt_4', «файл .txt_3' , 'file.txt_22', 'file.txt_21', 'file.txt_2', 'file.txt_1', 'file.txt_0'] script.py

!/USR/бен/питон из os import listdir из os.path import isfile, join directory_2_look = '/ var/tmp/lee /' files = [f for f in

listdir (directory_2_look) if isfile (join_2_look, f))] print sorted (files, reverse = True) files = sorted (files, reverse = True) print файлов [0] file_to_read = open (join (directory_2_look) файлы [0]), 'г')

печать file_to_read.read()

+0

Спасибо большое.Когда я проверяю эту часть, я получаю одну и ту же программу python, созданную в папке и печатаемой. В примере, который вы указали, возможна ли эта операция только для file.txt, и я предполагаю, что вы должны получить файл.txt_99 как вывод, а не файл script.py или любые другие файлы. – user2269123

+0

Да, вам просто нужно создать скрипт в другом каталоге :-) Кроме того, посмотрите файлы [1]. Это дает вам второй, так как первым является ваш скрипт. Однако это опасно, скажем, вы создаете еще один скрипт в каталоге call script.py1, вам нужно будет посмотреть файлы [2] и так далее. Лучше не создавать скрипты в каталоге, который содержит ваши данные. Я только поместил его туда, потому что хотел, чтобы вы увидели какой-то контент. Все остальные файлы были пусты! :-) – LeeO

+0

Спасибо :-) Но мне нужно выполнить точную операцию, но для файлов, начинающихся только с определенным именем типа «file.txt_», потому что в моем случае есть и другие файлы, созданные вместе с Hello.txt_, например, Error.txt_ и т. Д. Возможно ли такое же действие, но только для файлов, представляющих для нас интерес? – user2269123

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