python如何检测文件或图片类型

一、检测文件类型—filetype

简介

官方地址

这是小型且无依赖的Python包,用于推断文件类型和 MIME 类型,检查文件或缓冲区的幻数签名

特点

  • 简单友好的API
  • 支持多种文件类型
  • 提供文件扩展名和 MIME 类型推断
  • 按扩展名或 MIME 类型发现文件
  • 按种类发现文件(图像、视频、音频……)
  • Pluggable : 添加新的自定义类型匹配器
  • 快速,甚至处理大文件 只需要代表最大文件头的前
  • 261 个字节,
  • 因此您只需传递一个字节列表
  • 无依赖(只有 Python 代码,没有 C 扩展,没有 libmagic 绑定)
  • 跨平台文件识别

支持的文件类型

太多了,自己看吧,几乎常用文件都支持

支持的文件类型点我(打不开就梯子)

安装

pip install filetype

使用

import filetype

def main(filename):
    kind = filetype.guess(filename)
    if kind is None:
        print('Cannot guess file type!')
        return

    print('File extension: %s' % kind.extension)
    print('File MIME type: %s' % kind.mime)

if __name__ == '__main__':
    main('test.png')

输出:

File extension: jpg
File MIME type: image/jpeg

在这里插入图片描述

为什么,我的文件是png图片,检测出来是jpg格式呢?模块当然没问题,只是我手动更改了文件后缀,所以此模块还有一个用途:
文件真实格式检测
1、可以检测是否篡改了文件后缀,例如图片文件
2、可以检测一部分文件是否进行文件隐藏合并

二、图片格式检测

一、PIL模块

安装
pip install Pillow
使用1:本地图片
from PIL import Image

img = Image.open('111.png')  # 真实为jpg,改后缀为png了
print(img.format)

输出:

JPEG
使用2:base64格式图片
import io
import base64
from PIL import Image

img_base64 = '这里填写图片base64编码'
img_byte = base64.b64decode(img_base64.encode())
img_io = io.BytesIO(img_byte)
img = Image.open(img_io)
print(img.format)

输出:

JPEG

二、 imghdr模块

功能描述:imghdr模块用于识别图片的格式。它通过检测文件的前几个字节,从而判断图片的格式。

唯一一个API

imghdr.what(file, h=None)

第一个参数file :可以是用rb模式打开的file对象或者表示路径的字符串和PathLike对象。
第二个参数:h参数是字节。
函数返回表示图片格式的字符串。

支持的类型
返回值描述检测方式
jpeg用JFIF或者Exif格式保存的JPEG图片第7到第10个字节是b’JFIF’或者b’Exif’
png可移植网络图形格式(Portable Network Graphic Format)以字节串b’\x89PNG\r\n\x1a\n’开头
gifGIF(Graphics Interchange Format)的87版本和89版本前6个字节为b’GIF87a’或者b’GIF89a’
tiffTIFF(Tag Image File Format)的两种字节顺序前两个字节为b’MM’或者b’II’
rgbSGI ImgLib以字节串b’\x01\xda’开头
pbmPortable Bitmap第1个字节为b’P’,第2个字节为b’1’或b’4’,第3个字节为b’\t’或b’\n’或b’\r’
pgmPortable Graymap Files第1个字节为b’P’,第2个字节为b’2’或b’5’,第3个字节为b’\t’或b’\n’或b’\r’
ppmPortable Pixmap Files第1个字节为b’P’,第2个字节为b’3’或b’6’,第3个字节为b’\t’或b’\n’或b’\r’
rastSun Raster以字节串b’\x59\xA6\x6A\x95’开头
xbmX Bitmap Files以字节串b’#define ‘开头
bmpBitmap,Windows标准图像文件格式以字节串b’BM’开头
webp谷歌的WebP格式,Python3.5加入以字节串b’RIFF’开头并且第9到第12个字节为b’WEBP’
exrOpenEXR,Python3.5加入以字节串b’\x76\x2f\x31\x01’开头
简单使用——本地图片
import imghdr
imghdr.what('test.jpg')

输出:

jpeg
简单使用——爬虫网络图片

在写爬虫的时候如果爬取图片的话,在保存的时候我们需要知道图片的格式,不然gif的保存为了png什么的就动不起来了,但是有一些图片的格式是不太容易由url中识别出来的,比如有些图片的url是这个样子的:

http://www.xx.com/bar.png?element=bar

像这种要做后缀截取的话需要考虑很多情况,所以这个时候imghdr就派上用场了。

import imghdr
import uuid

import requests

url = 'xxxx'
response = requests.get(url)
save_name = uuid.uuid1().hex + "." + imghdr.what(None, response.content)  # python中uuid来生成机器唯一标识
print(save_name)
with open(save_name, 'wb') as img_file:
    img_file.write(response.content)

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用Python中的Pillow库来实现将CSV文件转成图片,以下是实现的代码: ```python from PIL import Image import csv data = [] with open('example.csv', newline='') as f: reader = csv.reader(f) for row in reader: data.append(row) img = Image.new('RGB', (len(data[0]), len(data))) pixels = img.load() for i in range(len(data)): for j in range(len(data[i])): pixel = int(data[i][j]) pixels[j, i] = (pixel, pixel, pixel) img.show() ``` 这段代码将读取一个名为example.csv的CSV文件,并将其转换为一个黑白图像并显示出来。为了使用该代码,您需要安装Pillow库。 ### 回答2: 要将Python的CSV文件转化为图片,可以使用以下步骤: 1. 导入必要的模块:你需要导入`pandas`和`matplotlib`模块来处理CSV数据和生成图像。 2. 读取CSV文件:使用`pandas`库的`read_csv`函数来读取CSV文件,并将其存储为一个数据帧。 3. 准备数据:根据你的需求,对数据进行必要的清理、处理和转换。例如,你可能需要删除不需要的列、处理缺失值或进行转换等操作。 4. 绘制图像:使用`matplotlib`库的各种绘图函数来创建图像。你可以选择根据数据的特点选择适当的类型,如折线图、散点图、饼图等。 5. 保存图像:使用`matplotlib`库的`savefig`函数将生成的图像保存为文件。你可以指定图像的格式(如PNG、JPEG等)和保存的路径。 以下是一个简单示例的代码,将CSV文件中的一列数据绘制为折线图并保存为PNG文件: ```python import pandas as pd import matplotlib.pyplot as plt # 读取CSV文件 data = pd.read_csv('data.csv') # 准备数据,假设CSV文件的第一列是x轴数据,第二列是y轴数据 x = data.iloc[:, 0] y = data.iloc[:, 1] # 绘制折线图 plt.plot(x, y) # 添加标题和坐标轴标签 plt.title('CSV数据折线图') plt.xlabel('X轴') plt.ylabel('Y轴') # 保存图像为PNG文件 plt.savefig('plot.png') ``` 同时,你可以根据自己的需求自定义图像的样式、图例、刻度等,并使用其他的绘图函数来绘制不同类型的图像。 ### 回答3: 在Python中,可以通过使用Pandas库来读取和处理CSV文件,并使用Matplotlib库来绘制图像。 首先,我们需要安装Pandas和Matplotlib库。在命令行中运行以下命令安装它们: ``` pip install pandas matplotlib ``` 接下来,我们将使用Pandas的read_csv函数来读取CSV文件。假设CSV文件名为data.csv,文件中包含了图像数据。可以使用以下代码来读取CSV文件并将数据存储在一个Pandas DataFrame中: ```python import pandas as pd data = pd.read_csv('data.csv') ``` 读取CSV文件后,我们可以根据数据的列来生成图片。假设CSV文件中的一列代表了图像的像素值,我们可以使用Matplotlib的imshow函数来绘制图像。以下是一个示例代码: ```python import matplotlib.pyplot as plt # 从DataFrame获取图像数据列 pixels = data['pixels'] # 创建一个2D数组来存储图像数据 image = [list(map(int, pixel.split())) for pixel in pixels] # 绘制图像 plt.imshow(image, cmap='gray') plt.axis('off') plt.show() ``` 以上代码中,我们首先从DataFrame中获取图像数据列,并将其存储在一个新的变量pixels中。然后,我们使用一个列表推导式将每个像素值分割,并将其转换为整数类型的列表。 最后,我们使用Matplotlib的imshow函数来绘制图像。使用参数cmap='gray'可以确保图像以灰度的方式显示。同时,使用plt.axis('off')可以隐藏坐标轴。 运行以上代码后,将会显示生成的图像。根据CSV文件中的像素值,可以生成对应的图像。 总结起来,在Python中,我们可以使用Pandas读取CSV文件,然后使用Matplotlib绘制图像。使用这两个库的函数和方法,可以轻松地将CSV文件转换为图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞得更高肥尾沙鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值