2015-08-18 2 views
0

Я хочу иметь скрипт, который получает имя файла и проверяет, является ли это файлом. Файл заканчивается на .txt, .exe и т. Д. '. Есть какая-либо библиотека или модуль в python, которые включают ВСЕ Форматы файлов? Если этого не происходит, как я могу проверить, что данный вход (например: hey.txt, what.exe и т. Д.) Является файлом? P.S Я проверяю файлы веб-сайта, а не система работы файла (например: «https://www.magshimim.net/App_Themes/En/images/powered_by_priza_heb.gif» Спасибо всем помощникам :)Форматы файлов в python

+1

«Файл заканчивается на .txt, .exe и т. Д.». Это звучит неправильно для меня. Я все время вижу файлы с именами типа README. У них вообще нет расширения, но они все еще являются файлами. – Kevin

+1

os.path.isfile (ввод)? Или я не понимаю вас правильно? – akalikin

+1

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

ответ

2

Там нет такой библиотеки, потому что существует неограниченное количество форматов файлов. Я могу создать свой собственный .something, и вы тоже можете, файл по-прежнему будет правильным.

Вместо этого вы должны использовать os.path.isfile().


Как @ zero323 указал на это, и в соответствии с вашими редактирования, вы должны использовать библиотеку mimetypes.

Затем используйте .guess_type(), который возвращает None, если тип файла не может быть угадан.

См. Полный список MIME-типов here.

+0

Ну, я не говорю, что это полезно здесь, но для обычных типов всегда есть ['mimetypes'] (https://docs.python.org/2/library/mimetypes.html) :) – zero323

+0

посмотреть на мое редактирование пожалуйста – Mike

+0

@RonHalfon Я отредактировал свой собственный ответ. – Delgan

0

Лучше всего использовать регулярные выражения, так как ваш скрипт проверяет, является ли следующий объект файлом или нет. Если вы хотите проверить, существует ли конкретный файл, тогда было бы полезно используйте os.path.isfile (path) ... , если вам удобно с регулярными выражениями, тогда попробуйте создать регулярное выражение, иначе сообщите мне, я создам его для вас. Ваш отзыв будет высоко оценен спасибо.

2

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

import urllib2 

urls = ['https://www.magshimim.net/App_Themes/En/images/powered_by_priza_heb.gif', 
     'https://www.magshimim.net/images/magshimim_logo.png'] 

for url in urls: 
    response = urllib2.urlopen(url) 
    print url 
    print response.headers.getheader('Content-type') # Content Type 
    print response.headers.getheader('Content-Length') # Size 
    print 

Вывод должен быть:

https://www.magshimim.net/App_Themes/En/images/powered_by_priza_heb.gif 
image/gif 
1325 

https://www.magshimim.net/images/magshimim_logo.png 
image/png 
8314 
+0

Вау, я просто вспомнил, что ОП упоминал веб-сервер и вернулся, чтобы добавить то же самое к моему сообщению. И, очевидно, увидел, что вы уже разместили это решение! Отлично! – Dalen

0

Я предлагаю:

import os.path # Use any path (ntpath, posixpath, ...) module that uses "." as an extension separator instead to be sure (if you want) 

filename, ext = os.path.splitext(inputname) 
# If filename and ext are both full, then it is a filename like 'something.txt' 
# If only ext is there, and filename is not, then filename is something like '.bashrc' or '.ds_store' 
# If there is no ext, only filename, then a file doesn't have an extension 
# So: 
if filename and ext: print "File", filename, "with extension", ext 
elif ext and not filename: 
    filename = ext; ext = "" 
    print "File", filename, "with no extension!" 
else: print filename, "is not a file by 'must have an extension' rule!" 

Вы также можете достичь чек с чем-то вроде:

c = inputname.count(".") 
if c!=0 and not inputname.endswith(".") and not (inputname.startswith(".") and c==1): 
    print inputname, "is a file because it has an extension!" 
else: print inputname, "is not a file, no extension!" 

Если вам действительно нужно проверьте существующий формат, затем да, использовать mimetypes.

Или Google вокруг, я видел где-то довольно обширный список (как библиотека) всех форматов для PHP. Возьмите это и преобразуйте его в Python. Немногие найти и заменить это сделают.

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