< Python全景系列-4 > 史上最全文件类型读写库大盘点!什么?还包括音频、视频?

欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语言!

本文系列第四篇,介绍史上最全PYTHON文件类型读写库大盘点!包含常用和不常用的大量文件格式!文本、音频、视频应有尽有!废话不多说!走起来!

先给大家快捷总结:

文件格式Python库
文本文件 内置open函数
CSV文件 csv
JSON文件 json
XML文件 xml.etree.ElementTree
二进制文件 内置open函数
图片文件 PIL (Python Imaging Library)
Word文件 python-docx
XLSX文件 openpyxl
PDF文件 PyPDF2
SQLite数据库文件 sqlite3
音频文件 pydub
视频文件 moviepy
HTML文件 BeautifulSoup
YAML文件 pyyaml
ZIP文件 zipfile

 

正文开始!

1. 文本文件

在Python中,处理文本文件是最基础的文件操作,我们使用内置的open函数打开一个文件,然后使用文件对象的read或write方法进行读写操作。

# 写入文本文件
with open('example.txt', 'w') as f:
    f.write('Hello, Python!')

# 读取文本文件
with open('example.txt', 'r') as f:
    print(f.read())

 

在这里,open函数的第一个参数是文件名,第二个参数是文件模式,其中'r'代表读模式,'w'代表写模式。使用'with'语句可以确保文件在操作完成后被正确关闭。这是一个标准的文件操作模式,也适用于其他类型的文件。

 

2. CSV文件

CSV(Comma-Separated Values)文件是一种常用的数据交换格式,每行表示一条记录,各字段之间由逗号分隔。Python的csv模块提供了用于读写CSV文件的工具。

 

import csv

# 写入CSV文件
with open('example.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['name', 'age'])
    writer.writerow(['Alice', 20])
    writer.writerow(['Bob', 25])

# 读取CSV文件
with open('example.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

 

 

 

 

这里,csv.writer和csv.reader函数分别返回一个写入器和读取器对象,我们可以使用这些对象进行CSV文件的读写操作。

 

3. JSON文件

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。Python的json模块提供了用于读写JSON文件的工具。

import json

# 写入JSON文件
data = {
    'name': 'Alice',
    'age': 20,
}
with open('example.json', 'w') as f:
    json.dump(data, f)

# 读取JSON文件
with open('example.json', 'r') as f:
    data = json.load(f)
    print(data)

 

在这里,json.dump和json.load函数分别用于将Python对象转换为JSON格式并写入文件,以及从文件中读取JSON数据并转换为Python对象。

 

4. XML文件

XML(eXtensible Markup Language)是一种标记语言,可以用来描述数据的结构。Python的xml模块提供了用于读写XML文件的工具。

from xml.etree import ElementTree as ET

# 写入XML文件
root = ET.Element('root')
child = ET.Element('child')
child.text = 'Hello, Python!'
root.append(child)
tree = ET.ElementTree(root)
tree.write('example.xml')

# 读取XML文件
tree = ET.parse('example.xml')
root = tree.getroot()
for child in root:
    print(child.text)

 

在这里,我们使用xml.etree.ElementTree模块创建一个XML文件的树形结构,然后使用ElementTree对象的write方法将其写入文件。读取XML一个ElementTree对象,然后通过遍历这个对象来读取XML数据。

 

5.二进制文件

二进制文件是直接包含二进制数据的文件,例如图像文件、音频文件等。Python使用'b'模式打开二进制文件,然后使用文件对象的read或write方法进行读写操作。

# 写入二进制文件
data = b'Hello, Python!'
with open('example.bin', 'wb') as f:
    f.write(data)

# 读取二进制文件
with open('example.bin', 'rb') as f:
    data = f.read()
    print(data)

 

在这里,'wb'和'rb'分别代表二进制写模式和二进制读模式。注意我们使用bytes类型的数据进行二进制写操作。

 

6. 图片文件

处理图片文件一般需要借助第三方库,如PIL(Python Imaging Library)。

from PIL import Image

# 读取图片文件
img = Image.open('example.jpg')

# 修改图片
img = img.rotate(45)  # 旋转45度

# 写入图片文件
img.save('example_rotated.jpg')

 

 

这里,Image.open和Image.save函数分别用于读取和保存图片文件。PIL库提供了丰富的图像处理功能,例如旋转、裁剪、缩放等。

 

7. Word文件

处理Word文件,我们可以使用python-docx库,这是一个创建、修改和提取Microsoft Word文件的Python库。

from docx import Document

# 创建新的Word文件
doc = Document()
doc.add_paragraph('Hello, Python!')
doc.save('example.docx')

# 读取Word文件
doc = Document('example.docx')
for para in doc.paragraphs:
    print(para.text)

 

 

在这里,我们首先创建一个Document对象,然后使用add_paragraph方法添加段落,最后使用save方法保存文档。读取Word文件时,我们遍历Document对象的paragraphs属性,打印出每个段落的文本。

 

8. XLSX文件

处理Excel文件,我们可以使用openpyxl库,这是一个读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。

from openpyxl import Workbook, load_workbook

# 创建新的Excel文件
wb = Workbook()
ws = wb.active
ws['A1'] = 'Hello,'
ws['B1'] = 'Python!'
wb.save('example.xlsx')

# 读取Excel文件
wb = load_workbook('example.xlsx')
ws = wb.active
print(ws['A1'].value, ws['B1'].value)

 

 

在这里,我们首先创建一个Workbook对象和Worksheet对象,然后使用字典方式访问单元格并赋值,最后使用save方法保存工作簿。读取Excel文件时,我们使用load_workbook函数加载工作簿,然后访问激活的工作表的单元格。

 

9. PDF文件

PDF是一种常见的文件格式,我们可以使用Python的PyPDF2库来处理PDF文件。

import PyPDF2

# 读取PDF文件
with open('example.pdf', 'rb') as f:
    reader = PyPDF2.PdfFileReader(f)
    page = reader.getPage(0)
    print(page.extractText())

# 注意:PyPDF2不能直接创建PDF文件,但可以合并、裁剪和旋转PDF文件

 

 

在这里,我们使用PdfFileReader对象读取PDF文件,然后使用getPage方法获取某一页,最后使用extractText方法提取文本。注意PyPDF2不能直接创建PDF文件,但可以合并、裁剪和旋转PDF文件。

 

10. SQLite数据库文件

SQLite是一种嵌入式数据库,它的数据库全都保存在一个单独的文件中。Python的sqlite3模块提供了对SQLite数据库的支持。

import sqlite3

# 创建并写入SQLite数据库
conn = sqlite3.connect('example.db')
c = conn.cursor()
c.execute("CREATE TABLE test (name text, age integer)")
c.execute("INSERT INTO test VALUES ('Alice', 20)")
conn.commit()
conn.close()

# 读取SQLite数据库
conn = sqlite3.connect('example.db')
c = conn.cursor()
for row in c.execute("SELECT * FROM test"):
    print(row)
conn.close()

 

 

在这里,我们首先创建一个数据库连接和游标对象,然后使用execute方法执行SQL语句,最后使用commit方法提交事务。读取SQLite数据库时,我们遍历execute方法的结果,打印出每一行。

 

 

11. 音频文件

处理音频文件,我们可以使用pydub库,这是一个处理音频的Python库。

from pydub import AudioSegment

# 读取音频文件
audio = AudioSegment.from_file('example.mp3')

# 修改音频
audio = audio.reverse()  # 反转音频

# 保存音频文件
audio.export('example_reversed.mp3', format='mp3')

 

 

在这里,AudioSegment.from_file函数用于读取音频文件。pydub库提供了丰富的音频处理功能,例如反转、裁剪、合并等。最后使用export方法保存音频文件。

 

12. 视频文件

处理视频文件,我们可以使用moviepy库,这是一个用于视频编辑的Python库。

from moviepy.editor import VideoFileClip

# 读取视频文件
clip = VideoFileClip('example.mp4')

# 修改视频
clip = clip.subclip(10, 20)  # 截取第10秒到第20秒的片段

# 保存视频文件
clip.write_videofile('example_subclip.mp4')

 

 

在这里,VideoFileClip函数用于读取视频文件。moviepy库提供了丰富的视频处理功能,例如裁剪、拼接、添加音频等。最后使用write_videofile方法保存视频文件。

13. HTML文件

HTML是网页的主要构成元素。我们可以使用Python的beautifulsoup库解析HTML文件。

from bs4 import BeautifulSoup

# 读取HTML文件
with open('example.html', 'r') as f:
    soup = BeautifulSoup(f, 'html.parser')

# 解析HTML
print(soup.title.text)  # 打印标题

# 注意:BeautifulSoup不能直接创建HTML文件,但可以修改HTML文件

 

 

在这里,我们使用BeautifulSoup对象解析HTML文件,然后通过标签名访问HTML元素。

 

14. YAML文件

YAML(YAML Ain't Markup Language)是一种直观的数据序列化格式,常用于配置文件。Python的pyyaml库提供了用于读写YAML文件的工具。

import yaml

# 写入YAML文件
data = {'name': 'Alice', 'age': 20}
with open('example.yaml', 'w') as f:
    yaml.dump(data, f)

# 读取YAML文件
with open('example.yaml', 'r') as f:
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

 

 

在这里,yaml.dump和yaml.load函数分别用于将Python对象转换为YAML格式并写入文件,以及从文件中读取YAML数据并转换为Python对象。

 

15. ZIP文件

ZIP是一种常用的压缩文件格式。Python的zipfile模块提供了用于读写ZIP文件的工具。

from zipfile import ZipFile

# 创建ZIP文件
with ZipFile('example.zip', 'w') as zf:
    zf.write('example.txt')

# 读取ZIP文件
with ZipFile('example.zip', 'r') as zf:
    print(zf.namelist())

 

在这里,我们使用ZipFile对象创建一个ZIP文件,然后使用write方法添加文件。读取ZIP文件时,我们使用namelist方法列出所有文件。

 

One More Thing

在处理文件时,一个常被忽视但又极其有用的技巧是使用Python的pathlib模块来处理文件路径。pathlib模块提供了一种面向对象的方式来处理文件和目录路径,使得路径的处理变得更加直观和简洁。 

from pathlib import Path

# 创建Path对象
p = Path('example.txt')

# 检查文件是否存在
if p.exists():
    print('File exists.')

# 获取文件的后缀名
print(p.suffix)

 

 

在这个例子中,我们使用Path对象表示一个文件路径,然后使用Path对象的方法和属性来进行各种操作,例如检查文件是否存在,获取文件的后缀名等。这是一个非常强大且易用的模块,可以极大地提高我们处理文件路径的效率。

 

以上就是Python全文件格式输入输出的介绍。希望通过本文,你能够对Python的文件操作有更深入的理解,并能够在实际编程中灵活运用。如果你有任何问题或想法,欢迎在评论区留言分享。

【第一时间获得Python全视角更新信息,请关注本人微信公众号: Python全视角】
本文转载于网络 如有侵权请联系删除

相关文章

  • Wiztalk | 110期 王元卓《科幻电影中的人工智能—机器学习》

    在教育部高等教育司的指导下,Wiztalk在2020年发布了一批教育部产学协同育人项目,面向有计算机科普工作经验的高校老师开放,将应用型的信息技术领域成果形成系列信息技术通识课程。 接下来内容为王元卓老师作品,希望对各位读者有所助益。本期内容 视频作者:中科院计算技术研究所 王元卓本期题目: 《科幻电影中的人工智能—机器学习》内容简介:在电影中,钢铁侠与美国队长曾因理念不同而大打出手,而钢铁侠凭借着战甲的机器学习能力得以扭转局势,占据上风。跳出科幻电影,现实中的机器学习又是一个什么情况呢?本期是王元卓老师的“科幻电影中的人工智能”系列中的第二讲,让我们跟着王元卓老师的脚步一起走进机器学习的大门吧!以下为展播视频关注更多精彩短视频,请点击下方Wiz小程序也可点击“阅读原文”或打开“哔哩哔哩”搜索关注“Wiztalk”,一起开启科普知识分享“新视界”~—关于Wiztalk —Wiztalk是腾讯高校合作团队打造的一个短视频知识分享系列,每集10分钟左右,致力于跟随科技的发展以及时代的步伐,使用更为科普化的方式传播最新、最热门、最通用的知识。点击“阅读原文”,观看王元卓老师往期视频

  • Python匿名函数lambda的使用

    一、匿名函数介绍在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数。lambda函数能接收任何数量(可以是0个)的参数,但只能返回一个表达式的值,lambda函数是一个函数对象,如果直接赋值给一个变量,这个变量就成了一个函数对象。语法:lambda参数:表达式先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。使用lambda函数可以省去函数的定义,不需要声明一个函数然后使用,而可以在写函数的同时直接使用函数。使用场景:1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数3.与一些Python的内置函数配合使用,提高代码的可读性二、匿名函数与普通函数的对比defsum_func(a,b,c): returna+b+c sum_lambda=lambdaa,b,c:a+b+c prin

  • 空中出租车创业公司Archer与汽车制造商FCA合作生产电动飞机

    Archer正在发展一种用于在城市交通中的,电动垂直起降(eVTOL)飞机的航空公司,该公司将与汽车制造商菲亚特·克莱斯勒汽车(FCA)建立新的合作伙伴关系,以联合后者的工程专业知识,设计,供应链和材料科学。Archer的目标是从2023年开始大规模生产其eVTOL,并于今年年初进行首次发布。在新的团队合作中,FCA将为Archer的eVTOL驾驶舱的设计做出贡献,这也是汽车制造商拥有丰富专业知识的另一个领域,因为该公司已经为汽车业务设计了数十年的驾驶舱。飞机将由电动机提供动力,并且具备以150英里/小时的最高速度飞行60英里的能力。通过与FCA合作研发,ArchereVTOL的设计安静且高效,降低了飞机的制造成本以实现并可持续的大批量制造。Archer希望FCA帮助其实现流程效率,从而将eVTOL推向市场,推出使最终用户也可以负担得起的合理业务。总部位于帕洛阿尔托的Archer希望最终将生产规模扩大到每年生产数千台eVTOL飞机,未来为全球城市服务增添空中出租车服务。Archer总部位于帕洛阿尔托,由联合创始人BrettAdcock和AdamGoldstein领导,包括首席工程师Go

  • PostgreSQL OUT OF MEMORY 你拎得清?

    当看到上面的这幅图,我想你的心情一定是不怎么美好,当然如果你设置了SWAP倒是很难看到这幅图,但估计也不会好受多少,投诉你数据库系统缓慢的唾沫或许可以给你建一个游泳池了。 遇到这样的问题怎么解决????从哪几个方面入手,这就是今天要说的 在说明白这件事之前要论论postgresprocessespostmaster,这个东西负责postgres的启动,分配内存包括sharedbuffers,监听端口,以及管理后端和其他有关的服务线程。 其中后端指的就是用户的连接一个进程一个用户的连接这里有一些子进程 backgroundwriterwalwriterautoovacuumarchiverlogicalreplication等等(这不是全部,根据你添加的功能而定),这些子进程都有自己要做的工作,并消耗系统的内存。现在我们的掐指算算,怎么就OUTOF内存了,掐指一算都是按照默认的配置。1shared_buffers用了整体的25%(部分书籍和国外一些专家的对PG初始时的建议)2wal_buffers占用了大约1/323270*max_locks_per_transaction*(max_c

  • 贪心策略 || 0435 无重叠空间

    No.1题目No.2分析在选择要保留区间时,区间的结尾十分重要:选择的区间结尾越小,余留给其它区间的空间就越大,就越能保留更多的区间。我们采取的贪心策略为,优先保留结尾小且不相交的区间。No.3代码classSolution { public: interaseOverlapIntervals(vector<vector<int>>&intervals) { if(intervals.size()==0){ return0; } sort(intervals.begin(),intervals.end(),[](vector<int>a,vector<int>b){ returna[1]<b[1]; }); vector<bool>flag(intervals.size(),false); intpre=intervals[0][1]; for(inti=1;i<intervals.size();i++) { if(pre>intervals[i][0]) { flag[i-1]=true; }

  • 小白学PyTorch | 5 torchvision预训练模型与数据集全览

    文章目录:1torchvision.datssets2torchvision.models模型比较本文建议复制代码去跑跑看,增加一下手感。如果有些数据需要科学上网,公众号回复【torchvision】获取代码和数据。 torchvision官网上的介绍(翻墙):Thetorchvisionpackageconsistsofpopulardatasets,modelarchitectures,andcommonimagetransformationsforcomputervision.翻译过来就是:torchvision包由流行的数据集、模型体系结构和通用的计算机视觉图像转换组成。简单地说就是常用数据集+常见模型+常见图像增强方法这个torchvision中主要有包组成:torchvision.datasetstorchvision.modelstorchvision.transforms1torchvision.datssets包含贼多的数据集,包含下面的:官方说明了:AllthedatasetshavealmostsimilarAPI.Theyallhavetwocommonargu

  • 关于HashMap的一些理解

    概要本文主要补充对HashMap的一些理解、分析。相信大家对HashMap都很熟悉,但是其中的一些细节上的设计、思想,往往会被大家忽略,这些都是构成HashMap的重要组成部分,包括有"如何做hash","resize后如何保证key的位置","resize在高并发下引发的死循环","为什么TREEIFY_THRESHOLD=8?","允许null值的原因"等等,希望有你感兴趣的。补充对HashMap的几点理解为什么JDK1.8后链表改为红黑树当HashMap中有大量的元素都存放到同一个桶中时,这个桶下有一条长长的链表,这个时候HashMap就相当于一个单链表,假如单链表有n个元素,遍历的时间复杂度就是O(n),如果hash冲突严重,由这里产生的性能问题尤为突显。 JDK1.8中引入了红黑树,当链表长度>=TREEIFY_THRESHOLD(8)&tab.length>=MIN_TREEIFY_CAPACITY(64)时,链表就会转化为红黑树,它的查找时间复杂度为O(

  • python菜鸟教程 | 基础数学运算

    基本的加减乘除 python可以直接运算数字,也可以加print 进行运算.>>>1+1 2 >>>2-1 1 >>>2*3 6 >>>4/3 1.3333333333333333复制^与** python当中^符号,区别于Matlab,在python中,^用两个**表示,如3的平方为3**2 , **3表示立方,**4表示4次方,依次类推>>>3**2#**2表示2次方 """" 9 """" >>>3**3#**3表示3次方 """" 27 """" >>>3**4 """" 81 """"复制取余数% 余数符号为“%”,见代码.>>>8%3 """ 2 "&quo

  • Knockout.Js官网学习(options绑定)

    前言options绑定控制什么样的options在drop-down列表里(例如:<select>)或者multi-select列表里(例如:<selectsize='6'>)显示。此绑定不能用于<select>之外的元素。关联的数据应是数组(或者是observable数组),<select>会遍历显示数组里的所有的项。对于multi-select列表,设置或者获取选择的多项需要使用selectedOptions绑定。对于single-select列表,你也可以使用value绑定读取或者设置元素的selected项。Drop-downlist<p>Destinationcountry:<selectdata-bind="options:availableCountries"></select></p> <scripttype="text/javascript"src="~/Scripts/knockout-2.3.0

  • ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程

    开篇:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器。那么,在ASP.NETMVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫道来! 一、开放的ASP.NETMVC代码2009年,Microsoft推出了ASP.NETMVC,也将ASP.NETMVC项目作为开源项目推送到了开源社区中,至今时间也过去快6年了,ASP.NETMVC已经到了5.0的版本阶段了。我们看到ASP.NETMVC从一个不完整的小孩长成一个日渐成熟的巨人,我们可以从开源社区找到ASP.NETMVC的源码,相比之前我们需要Reflector进行反编译查看,这次则轻松得多。  这里我们选择ASP.NETMVC4的源码作为分析对象,我已经将其上传到了网盘中,你可以通过下面这个地址进行下载:  传送门:http://pan.baidu.com/s/1bnF8ZPt  下载完成后,打开ASP.NETMVC4的源代码,你会看

  • Q3百度移动报告:TABLE大城市圈完地,向城乡结合部进军

    今天百度发布了Q3移动报告。百度利用数据收集、统计分析和挖掘以及资源上的优势,定期发布产业研究报告,移动趋势报告价值较高,值得关注。与半年前的Q1相比,中国移动互联网发生了哪些变化?一、手机厂商笑了,App厂商可能要皱眉。报告显示国内安卓日活跃用户已达2.7亿,大盘增幅连续两个季度保持在10%级别,去年季度增幅在50%左右,可见新增活跃用户已趋于平缓。按照安卓在智能手机大盘占比约为76.7%(艾媒)估计,智能手机总的日活跃用户应在3.5亿左右。Q3国内安卓手机出货量为8600万,前三季出货量达2.36亿部,所有智能手机应在3亿部,超过去年全年的2.1亿。IDC以及开复老师去年底的预测需要提高1亿,即今年智能手机出货量接近4亿部,到年底智能手机用户数将超过6亿。年增长率依然接近100%,尽管低于去年的130%,但依然高速增长。日活跃用户数增长趋缓,智能手机出货量却保持高速增长,原因在于智能手机增长很大部分来自于老用户换机。百度报告显示,一年前只有4%的购买是换机,现在则是52%。此前友盟数据显示,使用一台安卓设备超过14个月的用户仅占10%。手机快消品化,是手机厂商的利好。它们在抢占功能

  • 理解国家大数据发展纲要,读这几篇就够啦!

    中关村大数据产业联盟自12年成立以来,积极呼吁、推动、参与国家大数据发展战略,着眼行业,普及、落地大数据应用。借此国家战略发布之日,传播联盟理念、宗旨。考察贵阳大数据,习大大懂的,你懂了吗?大数据思维的三板斧纲举目张:大数据时代的三大发展趋势和投资方向 第一篇:考察贵阳大数据,习大大懂的,你懂了吗?文/赵国栋中关村大数据产业联盟秘书长(2015.06.18) 提要:习总书记造访贵阳,无疑是大数据发展过程的助推器。但时至今日,依然有人不明所以,或不以为然。中关村大数据产业联盟秘书长特撰文,指出大数据定位,以及大数据驱动地方经济发展的要义。本文部分内容被收录到《中国大数据产业白皮书》,部分是即将出版的《产业互联网》一书的内容。从大历史观来看,“大数据”的内涵远远超越物联网、云计算等信息技术的概念,它的意义可以比肩“活字印刷术”的发明,大范围的消除信息不对称的现象,释放巨大的生产力,深刻改变社会的面貌,提升国家治理,革新科学研究的思想,促进产业间的跨界、融合和颠覆,并将极大的促进文明的传播、凝聚和升华。-------------数据自古存在。乌龟壳、树皮、绸缎都曾经是记录数据的媒介,现在都已

  • 关于YUNUCMSv1.0.6 任意文件删除与配置文件写shell-freebuf漏斗社区发布

    任意文件删除漏洞 0×00相关环境 源码信息:YUNUCMSv1.0.6 问题文件:\YUNUCMSv1.0.6\statics\ueditor\php\vendor\Local.class.php 漏洞类型:任意文件删除漏洞 站点地址:http://www.yunucms.com/ 0×01漏洞分析 在文件\YUNUCMSv1.0.6\statics\ueditor\php\vendor\Local.class.php的第34-57行中发现如下代码块,remove方法中使用POST接收key参数的值然后进行路径拼接再传入unlink函数中,未进行任何安全处理,存在任意文件删除漏洞。 追溯remove方法被调用的过程,在\YUNUCMSv1.0.6\statics\ueditor\php\controller.php文件中发现如下代码块,根据注释可知是实例化处理的方法的代码。 继续追溯dispatcher方法,在\YUNUCMSv1.0.6\statics\ueditor\php\vendor\Channel.class.php文件的第33-40

  • Redux源码解析系列(二) -- middleware 和 applyMiddleware

    本文作者:IMWeb黄qiong原文出处:IMWeb社区未经同意,禁止转载 在分析源码applyMiddleware之前,让我们先看看middleware是个啥Redux里我们都知道dispatch一个action,就会到达reducer,而middleware就是允许我们在dispatchaction之后,到达reducer之前,搞点事情。比如:打印,报错,跟异步API通信等等下面,让我们一步步来理解下middle是如何实现的:step1假设我们有个需求,想打印出dispatch的action之后,nextState的值。如图:先用一种很简单的方式去实现letaction=toggleTodo('2'); console.log('dispatch',action); store.dispatch(action); console.log('nextstate',store.getState())复制Step2包裹进函数里 functiondispatchAndLoge(store,action){ letaction=t

  • 巧用MongoDB部分索引优化性能问题

    【背景】最近研发提交业务需求,大概逻辑就是先统计总数,然后分页进行导出.SQL查询条件很简单。根据时间范围以及productTags字段必须存在作为条件.目前每天大约5000万数据量,数据保留6个月满足条件数据不多.但在没有索引的情况下,前端导出是卡死的.本次只讨论count性能问题,分页导数同样需要优化.具体SQL如下:db.xiaoxu20220704.count({"productTags":{"$exists":true},"deliveryTime":{"$gte":{"$numberLong":"1656864000000"}},"$lt":{"$numberLong":"1657814400000"}})目前是基于4.4版本的分片集群.当时也没有多想,下班后搞个创建索引语句跑起来,第二天上班创建成功,一共执行了8小时。通知研发可以进行验证.悲催的事情,执行count同样卡死.创建索引语句(4.2

  • linux入侵检测系统snort安装配置

    队长让俺瞅瞅snort,没想到安装配置都遇到问题。。。整理下过程,给跟我一样的家伙看看。。 由于本人机器是ubuntu,apt-get几下就可以了,其实网上有不少这样的文章。。。之所以还要写就是。。。看他们的文章踩到坑了   ubuntu安装 sudoapt-getinstallsnort sudoapt-getinstall-f#如果缺少啥包,可以用这个命令,会自动下载安装关联包,如果可以正常使用,该命令可忽略sudoapt-getinstallsnort-mysql#把snort的日志都输出到mysql数据库的插件,为了后面的可视化下面是我的snort的版本复制   ,,_-*>Snort!<*-  o")~Version2.9.2.2IPv6GRE(Build121)  ''''ByMartinRoesch&TheSnortTeam:http://www.snort.org/snort/snort-team  Copyright(C)1998-2012Sourcefire,Inc.,etal.  Usinglibpcapversion1.3.0 

  • VoIP语音处理流程和知识点梳理

    做音频软件开发10+年,包括语音通信、语音识别、音乐播放等,大部分时间在做语音通信。做语音通信中又大部分时间在做VoIP语音处理。语音通信是全双工的,既要把自己的语音发送出去让对方听到,又要接收对方的语音让自己听到。发送又可叫做上行或者TX,接收又可叫做下行或者RX。之前写了好多关于VoIP语音处理方面的文章,本文想结合框图对相关知识做一个梳理。先综述发送和接收方向的处理,再具体到每个知识点上。讲到某个知识点,如曾经写过相关的文章,就给出链接,如没有写过,等以后写到时再补上链接。由于一些知识点在发送和接收两个方向上是相关的,就放在一起讲。   VoIP语音处理在发送和接收方向上的软件框图如下图1和2:                                 &n

  • 项目展示$\beta$

    项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 Beta阶段项目展示 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 展示项目并总结 项目地址:http://sunie.top:9000 一、成员简介 个人介绍详见:团队介绍和采访 “假”相 姓名(博客园) 成员简介 角色定位 孙Y 管控项目进度、成员任务分配、贡献分计算、项目部署、会议组织、项目分享、博客撰写等多种任务,参与模型推理部分后端功能的提供。 PM/后端开发者/项目部署者/博客撰写者 钟RH 提出许多新颖的idea,推动前端部分进度。进行项目的部署并修复了很多bug。在beta阶段实现模型推理,改进问题反馈、用户注册。 前端负责人/项目部署者 吴F 查找了前端模板,实现了模型搭建模块的主要逻辑。在beta阶段实现封装,美化了搭建界面。 前端开发者 苏HX 实现了模型保存及帮助文档的前端逻辑。在beta阶段实现模型市场,并对文档进行大幅调整 前端开发者 陈CW 撰写了详细

  • Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) B. Divisiblity of Differences

    地址: 题目: B.DivisiblityofDifferences timelimitpertest 1second memorylimitpertest 512megabytes input standardinput output standardoutput Youaregivenamultisetof n integers.Youshouldselectexactly k oftheminasuchwaythatthedifferencebetweenanytwoofthemisdivisibleby m,ortellthatitisimpossible. Numberscanberepeatedintheoriginalmultisetandinthemultisetofselectednumbers,butnumberofoccurrencesofanynumberinmultisetofselectednumbersshouldnotexceedthenumberofitsoccurrencesintheo

  • 蒟蒻的学习计划

    待学习   拟阵   单纯形   朱刘算法   欧拉回路计数   sais

  • Windows下使用VScode运行c/c++文件

      这篇文章主要是讲如何使用VScode运行自己的C/C++程序,当然VScode只是其中一种编辑器,诸如sublime等功能强大的编辑器在安装了环境&插件后应该能够实现相同的功能。   不知道你是否和我原来一样,一个电脑上IDE五、六个,文本编辑器也非常杂乱。所以,首先我是想将文本编辑器统一起来,在综合了自己的习惯和观感后我删除了sublime和其他的编辑器(当然,由于.txt坑爹的机制,MS自带的文本编辑器一定要留着,不然很多时候乱码没法救QAQ),后面我便想着能不能将IDE和我的编辑器统一呢?毕竟VScode和VS开启的内存空间和体验差距还是很大的QAQ。所以今天就是一篇如何将VScode调教成自己的C/C++编译&运行工具。   在此之前我将VScode默认的命令行工具改成了我自己用的Cmder工具,虽说不知道有没有什么坑,但是我想这还是一个比较好的行为。一是可以统一自己的命令行工具,二是可以防止未来在powershell上使用一些命令出现一些不可告人的错误QAQ至于如何调教自己的Cmder就自行百度&google啦。这里提供一个博客:Cmder调教教程

相关推荐

推荐阅读