Tôi có một thư mục đầy đủ các tệp và chúng không có tiện ích mở rộng. Làm cách nào để kiểm tra các loại tệp? Tôi muốn kiểm tra loại tệp và thay đổi tên tệp phù hợp. Giả sử một hàm filetype[x]
trả về một loại tệp như png
. Tôi muốn làm điều này:
files = os.listdir["."]
for f in files:
os.rename[f, f+filetype[f]]
Làm thế nào để tôi làm điều này?
Martineau
Huy hiệu vàng 115K2525 gold badges160 silver badges284 bronze badges
Đã hỏi ngày 7 tháng 6 năm 2012 lúc 18:06Jun 7, 2012 at 18:06
9
Có các thư viện Python có thể nhận ra các tệp dựa trên nội dung của chúng [thường là số tiêu đề / phép thuật] và không dựa vào tên tệp hoặc tiện ích mở rộng.
Nếu bạn đang giải quyết nhiều loại tệp khác nhau, bạn có thể sử dụng python-magic
. Đó chỉ là một ràng buộc Python cho thư viện ____10 được thiết lập tốt. Điều này có một danh tiếng tốt và [chứng thực nhỏ] trong việc sử dụng hạn chế mà tôi đã tạo ra, nó đã rất vững chắc.
Ngoài ra còn có các thư viện cho các loại tệp chuyên dụng hơn. Ví dụ: Thư viện tiêu chuẩn Python có mô -đun
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
1 làm điều tương tự chỉ cho các loại tệp hình ảnh.Nếu bạn cần kiểm tra loại tệp không phụ thuộc [Pure Python], xem
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
2.
Phượng Hoàng
6.4884 Huy hiệu vàng36 Huy hiệu bạc44 Huy hiệu đồng4 gold badges36 silver badges44 bronze badges
Đã trả lời ngày 7 tháng 6 năm 2012 lúc 18:43Jun 7, 2012 at 18:43
Chris Johnsonchris JohnsonChris Johnson
Huy hiệu vàng 19.6K677 Huy hiệu bạc77 Huy hiệu đồng6 gold badges77 silver badges77 bronze badges
3
Thư viện ma thuật Python cung cấp chức năng bạn cần.
Bạn có thể cài đặt thư viện với
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
3 và sử dụng nó như sau:>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
Mã Python trong trường hợp này đang gọi đến Libmagic bên dưới mui xe, đây là cùng một thư viện được sử dụng bởi lệnh *NIX
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4. Do đó, điều này làm điều tương tự như các câu trả lời dựa trên quy trình/vỏ, nhưng không có chi phí đó.Đã trả lời ngày 26 tháng 6 năm 2014 lúc 14:51Jun 26, 2014 at 14:51
RichardrichardRichard
51.8K30 Huy hiệu vàng169 Huy hiệu bạc243 Huy hiệu Đồng30 gold badges169 silver badges243 bronze badges
3
Trên Unix và Linux có lệnh
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4 để đoán các loại tệp. Thậm chí còn có một cổng Windows.Từ trang người đàn ông:
Tệp kiểm tra từng đối số trong một nỗ lực để phân loại nó. Có ba bộ thử nghiệm, được thực hiện theo thứ tự này: kiểm tra hệ thống tập tin, kiểm tra số ma thuật và kiểm tra ngôn ngữ. Bài kiểm tra đầu tiên thành công khiến loại tệp được in.
Bạn sẽ cần chạy lệnh
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4 với mô -đun >>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
7 và sau đó phân tích các kết quả để tìm ra phần mở rộng.Chỉnh sửa: Bỏ qua câu trả lời của tôi. Sử dụng câu trả lời của Chris Johnson thay thế. Ignore my answer. Use Chris Johnson's answer instead.
Đã trả lời ngày 7 tháng 6 năm 2012 lúc 18:12Jun 7, 2012 at 18:12
Steven Rumbalskisteven RumbalskiSteven Rumbalski
43.1k8 Huy hiệu vàng85 Huy hiệu bạc117 Huy hiệu đồng8 gold badges85 silver badges117 bronze badges
3
Trong trường hợp hình ảnh, bạn có thể sử dụng mô -đun
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
1.>>> import imghdr
>>> imghdr.what['8e5d7e9d873e2a9db0e31f9dfc11cf47'] # You can pass a file name or a file object as first param. See doc for optional 2nd param.
'png'
Python 2 IMGHDR DOC PYTHON 3 IMGHDR DOC
Python 3 imghdr doc
Phượng Hoàng
6.4884 Huy hiệu vàng36 Huy hiệu bạc44 Huy hiệu đồng4 gold badges36 silver badges44 bronze badges
Đã trả lời ngày 7 tháng 6 năm 2012 lúc 18:43Oct 7, 2014 at 16:00
Chris Johnsonchris JohnsonLewis Diamond
Huy hiệu vàng 19.6K677 Huy hiệu bạc77 Huy hiệu đồng2 gold badges22 silver badges30 bronze badges
import subprocess as sub
p = sub.Popen['file yourfile.txt', stdout=sub.PIPE, stderr=sub.PIPE]
output, errors = p.communicate[]
print[output]
Thư viện ma thuật Python cung cấp chức năng bạn cần.
Bạn có thể cài đặt thư viện với
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
3 và sử dụng nó như sau:Jun 7, 2012 at 18:25
Mã Python trong trường hợp này đang gọi đến Libmagic bên dưới mui xe, đây là cùng một thư viện được sử dụng bởi lệnh *NIX
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4. Do đó, điều này làm điều tương tự như các câu trả lời dựa trên quy trình/vỏ, nhưng không có chi phí đó.xvatarĐã trả lời ngày 26 tháng 6 năm 2014 lúc 14:5115 silver badges19 bronze badges
3
Richardrichard
51.8K30 Huy hiệu vàng169 Huy hiệu bạc243 Huy hiệu Đồng
Trên Unix và Linux có lệnh
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4 để đoán các loại tệp. Thậm chí còn có một cổng Windows.Aug 5, 2016 at 0:43
Từ trang người đàn ông:
import subprocess
import shlex
filename = 'your_file'
cmd = shlex.split['file --mime-type {0}'.format[filename]]
result = subprocess.check_output[cmd]
mime_type = result.split[][-1]
print mime_type
Tệp kiểm tra từng đối số trong một nỗ lực để phân loại nó. Có ba bộ thử nghiệm, được thực hiện theo thứ tự này: kiểm tra hệ thống tập tin, kiểm tra số ma thuật và kiểm tra ngôn ngữ. Bài kiểm tra đầu tiên thành công khiến loại tệp được in.Jun 6, 2014 at 3:14
Bạn sẽ cần chạy lệnh
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4 với mô -đun >>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
7 và sau đó phân tích các kết quả để tìm ra phần mở rộng.bernieyChỉnh sửa: Bỏ qua câu trả lời của tôi. Sử dụng câu trả lời của Chris Johnson thay thế.1 gold badge16 silver badges8 bronze badges
2
Đã trả lời ngày 7 tháng 6 năm 2012 lúc 18:12
full_path = os.path.join[MEDIA_ROOT, pathfile]
try:
image_data = open[full_path, "rb"].read[]
except IOError:
return "Incorrect Request :[ !!!"
header_byte = image_data[0:3].encode["hex"].lower[]
if header_byte == '474946':
return "image/gif"
elif header_byte == '89504e':
return "image/png"
elif header_byte == 'ffd8ff':
return "image/jpeg"
else:
return "binary file"
Steven Rumbalskisteven Rumbalski
43.1k8 Huy hiệu vàng85 Huy hiệu bạc117 Huy hiệu đồngJul 6, 2019 at 10:36
Trong trường hợp hình ảnh, bạn có thể sử dụng mô -đun
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
1.evergreenPython 2 IMGHDR DOC PYTHON 3 IMGHDR DOC2 gold badges15 silver badges25 bronze badges
2
Đã trả lời ngày 7 tháng 10 năm 2014 lúc 16:00
//pypi.org/project/sh/
Kim cương Lewis Diamondlewis
21.3k2 Huy hiệu vàng22 Huy hiệu bạc 30 Huy hiệu Đồng
sh.file["/root/file"]
Như Steven đã chỉ ra,
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
7 là cách. Bạn có thể nhận được đầu ra lệnh ở trên như bài đăng này đã nóiĐã trả lời ngày 7 tháng 6 năm 2012 lúc 18:25Feb 2, 2019 at 18:45
xvatarxvatarLelouch
3.12915 Huy hiệu bạc19 Huy hiệu đồng6 silver badges6 bronze badges
Bạn cũng có thể cài đặt ràng buộc chính thức
>>> import magic
>>> magic.from_file['iceland.jpg']
'JPEG image data, JFIF standard 1.01'
>>> magic.from_file['iceland.jpg', mime=True]
'image/jpeg'
>>> magic.from_file['greenland.png']
'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
>>> magic.from_file['greenland.png', mime=True]
'image/png'
4 cho Python, một thư viện có tên >>> import imghdr
>>> imghdr.what['8e5d7e9d873e2a9db0e31f9dfc11cf47'] # You can pass a file name or a file object as first param. See doc for optional 2nd param.
'png'
1 [nó không sử dụng CTYPE, như python-magic
].import magic
import glob
from os.path import isfile
ROOT_DIR = 'backup'
WANTED_EXTENSION = 'sqlite'
for filename in glob.iglob[ROOT_DIR + '/**', recursive=True]:
if isfile[filename]:
extension = magic.from_file[filename, mime = True]
if WANTED_EXTENSION in extension:
print[filename]
//gist.github.com/izmcm/6a5d6fa8d4ec65fd9851a1c06c8946ac
Nó có sẵn trên PYPI dưới dạng tập tin-Magic và trên Debian là Python-Magic. Đối với tôi, thư viện này là tốt nhất để sử dụng vì nó có sẵn trên PYPI và trên Debian [và có thể là các phân phối khác], giúp quá trình triển khai phần mềm của bạn dễ dàng hơn. Tôi cũng đã viết blog về cách sử dụng nó.Aug 30, 2021 at 21:28
0