Важное примечание: Этот ответ был написан в 2011 году, за несколько лет до того, как ответ masterwok был написан. Хотя мой ответ все еще приемлем , ответ masterwok лучше и лаконичнее. Вместо этого используйте и подтвердите этот ответ. Все ниже для потомков.
Я бы просто использовал расширение файла, а не пытался сделать что-то умное, что в конечном итоге может вернуться к вам в задницу. :)
Расширение файла не нужно регистрировать в вашей системе (хотя я точно не знаю, что вы делаете с файлом ...). Вы можете использовать что-то вроде таблицы enum или db, которая содержит информацию о допустимых расширениях, если вы хотите отфильтровать файлы.
См. @ Идею Толгахана по этому вопросу. Ниже я создал перечисление C #, основанное на этом, которое должно предоставить людям отправную точку, если они захотят создать подход, основанный на db / enum / xml.
Public enum MimeTypes { [Description("application/postscript")] ai, [Description("audio/x-aiff")] aif, [Description("audio/x-aiff")] aifc, [Description("audio/x-aiff")] aiff, [Description("text/plain")] asc, [Description("application/atom+xml")] atom, [Description("audio/basic")] au, [Description("video/x-msvideo")] avi, [Description("application/x-bcpio")] bcpio, [Description("application/octet-stream")] bin, [Description("image/bmp")] bmp, [Description("application/x-netcdf")] cdf, [Description("image/cgm")] cgm, [Description("application/octet-stream")] class, [Description("application/x-cpio")] cpio, [Description("application/mac-compactpro")] cpt, [Description("application/x-csh")] csh, [Description("text/css")] css, [Description("application/x-director")] dcr, [Description("video/x-dv")] dif, [Description("application/x-director")] dir, [Description("image/vnd.djvu")] djv, [Description("image/vnd.djvu")] djvu, [Description("application/octet-stream")] dll, [Description("application/octet-stream")] dmg, [Description("application/octet-stream")] dms, [Description("application/msword")] doc, [Description("application/xml-dtd")] dtd, [Description("video/x-dv")] dv, [Description("application/x-dvi")] dvi, [Description("application/x-director")] dxr, [Description("application/postscript")] eps, [Description("text/x-setext")] etx, [Description("application/octet-stream")] exe, [Description("application/andrew-inset")] ez, [Description("image/gif")] gif, [Description("application/srgs")] gram, [Description("application/srgs+xml")] grxml, [Description("application/x-gtar")] gtar, [Description("application/x-hdf")] hdf, [Description("application/mac-binhex40")] hqx, [Description("text/html")] htm, [Description("text/html")] html, [Description("x-conference/x-cooltalk")] ice, [Description("image/x-icon")] ico, [Description("text/calendar")] ics, [Description("image/ief")] ief, [Description("text/calendar")] ifb, [Description("model/iges")] iges, [Description("model/iges")] igs, [Description("application/x-java-jnlp-file")] jnlp, [Description("image/jp2")] jp2, [Description("image/jpeg")] jpe, [Description("image/jpeg")] jpeg, [Description("image/jpeg")] jpg, [Description("application/x-javascript")] js, [Description("audio/midi")] kar, [Description("application/x-latex")] latex, [Description("application/octet-stream")] lha, [Description("application/octet-stream")] lzh, [Description("audio/x-mpegurl")] m3u, [Description("audio/mp4a-latm")] m4a, [Description("audio/mp4a-latm")] m4b, [Description("audio/mp4a-latm")] m4p, [Description("video/vnd.mpegurl")] m4u, [Description("video/x-m4v")] m4v, [Description("image/x-macpaint")] mac, [Description("application/x-troff-man")] man, [Description("application/mathml+xml")] mathml, [Description("application/x-troff-me")] me, [Description("model/mesh")] mesh, [Description("audio/midi")] mid, [Description("audio/midi")] midi, [Description("application/vnd.mif")] mif, [Description("video/quicktime")] mov, [Description("video/x-sgi-movie")] movie, [Description("audio/mpeg")] mp2, [Description("audio/mpeg")] mp3, [Description("video/mp4")] mp4, [Description("video/mpeg")] mpe, [Description("video/mpeg")] mpeg, [Description("video/mpeg")] mpg, [Description("audio/mpeg")] mpga, [Description("application/x-troff-ms")] ms, [Description("model/mesh")] msh, [Description("video/vnd.mpegurl")] mxu, [Description("application/x-netcdf")] nc, [Description("application/oda")] oda, [Description("application/ogg")] ogg, [Description("image/x-portable-bitmap")] pbm, [Description("image/pict")] pct, [Description("chemical/x-pdb")] pdb, [Description("application/pdf")] pdf, [Description("image/x-portable-graymap")] pgm, [Description("application/x-chess-pgn")] pgn, [Description("image/pict")] pic, [Description("image/pict")] pict, [Description("image/png")] png, [Description("image/x-portable-anymap")] pnm, [Description("image/x-macpaint")] pnt, [Description("image/x-macpaint")] pntg, [Description("image/x-portable-pixmap")] ppm, [Description("application/vnd.ms-powerpoint")] ppt, [Description("application/postscript")] ps, [Description("video/quicktime")] qt, [Description("image/x-quicktime")] qti, [Description("image/x-quicktime")] qtif, [Description("audio/x-pn-realaudio")] ra, [Description("audio/x-pn-realaudio")] ram, [Description("image/x-cmu-raster")] ras, [Description("application/rdf+xml")] rdf, [Description("image/x-rgb")] rgb, [Description("application/vnd.rn-realmedia")] rm, [Description("application/x-troff")] roff, [Description("text/rtf")] rtf, [Description("text/richtext")] rtx, [Description("text/sgml")] sgm, [Description("text/sgml")] sgml, [Description("application/x-sh")] sh, [Description("application/x-shar")] shar, [Description("model/mesh")] silo, [Description("application/x-stuffit")] sit, [Description("application/x-koan")] skd, [Description("application/x-koan")] skm, [Description("application/x-koan")] skp, [Description("application/x-koan")] skt, [Description("application/smil")] smi, [Description("application/smil")] smil, [Description("audio/basic")] snd, [Description("application/octet-stream")] so, [Description("application/x-futuresplash")] spl, [Description("application/x-wais-source")] src, [Description("application/x-sv4cpio")] sv4cpio, [Description("application/x-sv4crc")] sv4crc, [Description("image/svg+xml")] svg, [Description("application/x-shockwave-flash")] swf, [Description("application/x-troff")] t, [Description("application/x-tar")] tar, [Description("application/x-tcl")] tcl, [Description("application/x-tex")] tex, [Description("application/x-texinfo")] texi, [Description("application/x-texinfo")] texinfo, [Description("image/tiff")] tif, [Description("image/tiff")] tiff, [Description("application/x-troff")] tr, [Description("text/tab-separated-values")] tsv, [Description("text/plain")] txt, [Description("application/x-ustar")] ustar, [Description("application/x-cdlink")] vcd, [Description("model/vrml")] vrml, [Description("application/voicexml+xml")] vxml, [Description("audio/x-wav")] wav, [Description("image/vnd.wap.wbmp")] wbmp, [Description("application/vnd.wap.wbxml")] wbmxl, [Description("text/vnd.wap.wml")] wml, [Description("application/vnd.wap.wmlc")] wmlc, [Description("text/vnd.wap.wmlscript")] wmls, [Description("application/vnd.wap.wmlscriptc")] wmlsc, [Description("model/vrml")] wrl, [Description("image/x-xbitmap")] xbm, [Description("application/xhtml+xml")] xht, [Description("application/xhtml+xml")] xhtml, [Description("application/vnd.ms-excel")] xls, [Description("application/xml")] xml, [Description("image/x-xpixmap")] xpm, [Description("application/xml")] xsl, [Description("application/xslt+xml")] xslt, [Description("application/vnd.mozilla.xul+xml")] xul, [Description("image/x-xwindowdump")] xwd, [Description("chemical/x-xyz")] xyz, [Description("application/zip")] zip }
Если вы хотите ссылаться на файлы из папки foo / package1 / resources
, вы должны использовать переменную __ file __
модуля. Внутри foo / package1 / __ init __. Py
:
from os import path
resources_dir = path.join(path.dirname(__file__), 'resources')
Вы можете быть в безопасности и в то же время использовать приятный удобный API, если используете twisted.python.modules .
Например, если у меня data.txt
с некоторым текстом в нем и этот sample.py
в одном каталоге:
from twisted.python.modules import getModule
moduleDirectory = getModule(__name__).filePath.parent()
print repr(moduleDirectory.child("data.txt").open().read())
затем импорт sample
сделает следующее:
>>> import sample
'Hello, data!\n'
>>>
Если ваш модуль находится в обычном каталоге, getModule (__ name __). FilePath
будет FilePath ; если он находится в zip-файле, это будет ZipPath , который поддерживает большинство, но не все, одних и тех же API.
Это плохая идея, потому что, если ваш пакет был установлен в виде заархивированного яйца, ресурсы могут быть недоступны.
Если вы используете setuptool, не забудьте добавить zip_safe = False в конфигурацию setup.py