① python如何读取文件的内容
# _*_ coding: utf-8 _*_
import pandas as pd
# 获取文件的内容
def get_contends(path):
with open(path) as file_object:
contends = file_object.read()
return contends
# 将一行内容变成数组
def get_contends_arr(contends):
contends_arr_new = []
contends_arr = str(contends).split(']')
for i in range(len(contends_arr)):
if (contends_arr[i].__contains__('[')):
index = contends_arr[i].rfind('[')
temp_str = contends_arr[i][index + 1:]
if temp_str.__contains__('"'):
contends_arr_new.append(temp_str.replace('"', ''))
# print(index)
# print(contends_arr[i])
return contends_arr_new
if __name__ == '__main__':
path = 'event.txt'
contends = get_contends(path)
contends_arr = get_contends_arr(contends)
contents = []
for content in contends_arr:
contents.append(content.split(','))
df = pd.DataFrame(contents, columns=['shelf_code', 'robotid', 'event', 'time'])
(1)python读取mp4扩展阅读:
python控制语句
1、if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
2、for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
3、while语句,当条件为真时,循环运行语句块。
4、try语句,与except,finally配合使用处理在程序运行中出现的异常情况。
5、class语句,用于定义类型。
6、def语句,用于定义函数和类型的方法。
② 如何利用 Python 读取数据科学中常见几种文件
前言
如果你是数据行业的一份子,那么你肯定会知道和不同的数据类型打交道是件多么麻烦的事。不同数据格式、不同压缩算法、不同系统下的不同解析方法——很快就会让你感到抓狂!噢!我还没提那些非结构化数据和半结构化数据呢。
对于所有数据科学家和数据工程师来说,和不同的格式打交道都乏味透顶!但现实情况是,人们很少能得到整齐的列表数据。因此,熟悉不同的文件格式、了解处理它们时会遇到的困难以及处理某类数据时的最佳/最高效的方法,对于任何一个数据科学家(或者数据工程师)而言都必不可少。
在本篇文章中,你会了解到数据科学家或数据工程师必须知道的几种常规格式。我会先向你介绍数据行业里常用的几种不同的文件格式。随后,我会向大家介绍如何在 Python 里读取这些文件格式。
PS:在后文中提到的数据科学家,同样也包括数据工程师以及所有的数据科学专家。
目录
文件格式是什么。数据科学家应当了解各种不同文件格式的原因。不同的文件格式以及从 Python 中读取这些文件的方法。
1. 逗号分隔值
2. XLSX
3. ZIP
4. 纯文本(txt)
5. JSON
6. XML
7. HTML
8. 图像
9. 分层数据格式
10. PDF
11. DOCX
12. MP3
13. MP4
1. 文件格式是什么。
文件格式是计算机为了存储信息而使用的对信息的特殊编码方式。首先,文件格式代表着文件的类型,如二进制文件或者 ASCII 文件等。其次,它体现了信息组织的方式。比如,逗号分隔值(CSV)文件格式用纯文本来储存列表数据。
为了识别一个文件的格式,你通常会去看这个文件的扩展名。比如,一个以“CSV”格式保存的名为“Data”的文件下方的文件名会显示为“Data.csv”。看到“.csv”这个扩展名,我们就会清楚地知道这是一个“CSV”文件,并且还可以知道其中的数据是以表格的形式储存的。
2. 数据科学家应当了解各种不同文件格式的原因。
通常,你碰到的文件类型取决于你当下构造的应用。举个例子,在一个图像处理系统中,你需要把图像作为输入和输出。所以,你所见到的文件大都是jpeg、gif 或者 png 格式的。
作为一个数据科学家,你需要了解各种文件格式的底层结构以及相应的优势和劣势。只有了解了数据的底层结构,你才能够进一步去探索它,或者决定如何来储存相关的数据。
选择一个最理想的文件格式来储存数据能够提升你的模型在处理数据时的性能。
现在,让我们讨论一下下方这些文件格式以及如何在 Python 中读取它们:
逗号分隔值(CSV)XLSXZIP纯文本(txt)JSONXMLHTML图像分层数据格式PDFDOCXMP3MP4
3. 不同的文件格式以及从 Python 中读取这些文件的方法。
3.1 逗号分隔值
逗号分隔值文件格式属于电子表格文件格式的一种。
什么是电子表格文件格式?
在电子表格文件格式中,数据被储存在单元格里。每个单元格都处于特定的行和列中。电子表格文件中的列拥有不同的类型。比如说,它可以是字符串型的、日期型的或者整数型的。最常用的电子表格文件格式包括:逗号分隔值(CSV)、Microsoft Excel 电子表格(xls)以及 Microsoft Excel Open XML 电子表格(xlsx)。
CSV 文件中的每一行都代表一份观察报告,或者也可以说是一条记录。每一个记录都包含一个或者更多由逗号分隔的字段。
有时你看你会遇到用制表符而非逗号来分隔字段的文件。这种文件格式被称为 TSV(制表符分隔值)文件格式。
下面是一个用 Notepad 打开的 CSV 文件。
在Python 中从 CSV 文件里读取数据
现在让我们看看如何在 Python 中读取一个 CSV 文件。你可以用 Python 中的“pandas”库来加载数据。import pandas as pd
df = pd.read_csv(“/home/Loan_Prediction/train.csv”)
上方的代码将会把 train.csv 文件加载进 DataFrame df 中。
3.2 XLSX文件
XLSX 是 Microsoft Excel Open XML 的文件格式,它同样可以归入电子表格文件格式这一类中。它是由 Microsoft Excel 开发的一种基于 XML 文件格式。Microsoft Office 2007 最先采用 XLSX 格式来储存数据。
在XLSX 中,数据被放在工作表的单元格和列当中。每个 XLSX 文件可能包含一个或者更多工作表,所以一个工作簿中可能会包含多个工作表。
下面是一个在 Microsoft Excel 中打开的“xlsx”文件。
上图显示的这个文件里包含多个工作表,这些工作表的名称分别为 Customers、Employees、Invoice 和 Order。图片中显示的是其中一个工作表——“Invoice”——中的数据。
从XLSX 文件读取数据
让我们一起来加载一下来自 XLSX 文件的数据并且定义一下相关工作表的名称。此时,你可以用 Python 中的“pandas”库来加载这些数据。import pandas as pd
df = pd.read_excel(“/home/Loan_Prediction/train.xlsx”,sheetname = “Invoice”)
上方的代码将会把来自“train.xlsx”文件的工作表“Invoice”加载进 DataFrame df 中。
3.3 ZIP 文件
ZIP 格式是一种归档文件格式。
什么是归档文件格式?
在归档文件格式中,你可以创建一个包含多个文件和元数据的文件。归档文件格式通常用于将多个数据文件放入一个文件中的过程。这么做是为了方便对这些文件进行压缩从而减少储存它们所需的存储空间。
有很多种常用的电脑数据归档格式可以创建归档文件。Zip、RAR 和 Tar 是最常用的3种用于压缩数据的归档文件格式。
因此,ZIP 文件格式是一种无损压缩格式,这意味着如果你用 ZIP 格式压缩了多个文件,那么在解压缩之后你能够完全恢复这些数据。ZIP 文件格式使用多种压缩算法来压缩文件。你可以通过 .zip 这个扩展名轻易地识别出一个 ZIP 文件。
在Python 中读取 .ZIP 文件
你可以通过导入“zipfile”包来读取 zip 文件。下方的代码可以实现读取“T.zip”中的“train.csv”文件。import zipfile
在这里我已经讨论了其中一种最常用的归档格式,也已经讨论了如何在 python 中打开这种归档格式。我不会再对其他的归档格式进行展开讨论。如果你想了解不同类型的归档格式并且想对其做出比较
③ python爬虫,获取网站视频地址问题
你把404的页面的重定向抓取来就可以了。
④ python 怎么获取mp4的分辨率
获得H.264视频分辨率的方法
From: http //www cnblogs.com/likwo/p/3531241.html
在使用ffmpeg解码播放TS流的时候(例如之前写过的UDP组播流),在连接时往往需要耗费大量时间。经过debug发现是av_find_stream_info(已抛弃,现在使用的是avformat_find_stream_info)这个方法十分耗时,而且是阻塞的。av_find_stream_info方法主要是获得相应的流信息,其中对我的应用最有用的就是视频的分辨率。在av_find_stream_info中是要不断的读取数据包,解码获得相应的信息,而其中除了分辨率信息以外的东西对我的应用中是无用的。所以,考虑自己手动从H.264码流中解析出视频的分辨率信息。
以下内容主要参考了这篇文章:http //www myexception.cn/internet/586390.html
H.264码流的流信息都存储在了特殊的结构中,叫做SPS(Sequence Parameter Set)。要解析SPS就需要知道一些H.264码流的格式信息。
在H.264码流中,都是以0x00 0x00 0x01 或者 0x00 0x00 0x00 0x01为开始码的(在我的应用中为后者),之后通过检测开始码后第一个字节的后五位是否为7(00111)来判断其是否为SPS。得到SPS之后,就可以解析出视频的分辨率。SPS中有两个成员,pic_width_in_mbs_minus1和pic_height_in_map_units_minus_1,分别表示图像的宽和高,但是要注意的是它们都是以16为单位(在面积上就是以16*16的块为单位)再减1,所以实际的宽是(pic_width_in_mbs_minus1 + 1)*16,高为(pic_height_in_map_units_minus_1+1)*16。
欢迎转载,转载请注明出处:http //guoyb.com/Tech/34.html
以下是解析宽高的代码:
转载http //guoyb.com/Tech/34.html
以下部分 转自 http //blog.csdn.NET/pkueecser/article/details/7367641
使用RTP传输H264的时候,需要用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两项从哪里获取呢?答案是从H264码流中获取.在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f == 8.然后对获取的nal去掉开始码之后进行base64编码,得到的信息就可以用于sdp.sps和pps需要用逗号分隔开来.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如何解析SDP中包含的H.264的SPS和PPS串
http //www pernet.tv.sixxs.org/thread-109-1-1.html
SDP中的H.264的SPS和PPS串,包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。
由于SDP中的SPS和PPS都是BASE64编码形式的,不容易理解,附件有一个工具软件可以对SDP中的SPS和PPS进行解析。
用法是在命令行中输入:
spsparser sps.txt pps.txt output.txt
例如sps.txt中的内容为:
Z0LgFNoFglE=
pps.txt中的内容为:
aM4wpIA=
最终解析的到的结果为:
Start mping SPS:
profile_idc = 66
constrained_set0_flag = 1
constrained_set1_flag = 1
constrained_set2_flag = 1
constrained_set3_flag = 0
level_idc = 20
seq_parameter_set_id = 0
chroma_format_idc = 1
bit_depth_luma_minus8 = 0
bit_depth_chroma_minus8 = 0
seq_scaling_matrix_present_flag = 0
log2_max_frame_num_minus4 = 0
pic_order_cnt_type = 2
log2_max_pic_order_cnt_lsb_minus4 = 0
delta_pic_order_always_zero_flag = 0
offset_for_non_ref_pic = 0
offset_for_top_to_bottom_field = 0
num_ref_frames_in_pic_order_cnt_cycle = 0
num_ref_frames = 1
gaps_in_frame_num_value_allowed_flag = 0
pic_width_in_mbs_minus1 = 21
pic_height_in_mbs_minus1 = 17
frame_mbs_only_flag = 1
mb_adaptive_frame_field_flag = 0
direct_8x8_interence_flag = 0
frame_cropping_flag = 0
frame_cropping_rect_left_offset = 0
frame_cropping_rect_right_offset = 0
frame_cropping_rect_top_offset = 0
frame_cropping_rect_bottom_offset = 0
vui_parameters_present_flag = 0
Start mping PPS:
pic_parameter_set_id = 0
seq_parameter_set_id = 0
entropy_coding_mode_flag = 0
pic_order_present_flag = 0
num_slice_groups_minus1 = 0
slice_group_map_type = 0
num_ref_idx_l0_active_minus1 = 0
num_ref_idx_l1_active_minus1 = 0
weighted_pref_flag = 0
weighted_bipred_idc = 0
pic_init_qp_minus26 = 0
pic_init_qs_minus26 = 0
chroma_qp_index_offset = 10
deblocking_filter_control_present_flag = 1
constrained_intra_pred_flag = 0
rendant_pic_cnt_present_flag = 0
transform_8x8_mode_flag = 0
pic_scaling_matrix_present_flag = 0
second_chroma_qp_index_offset = 10
/////////////////////////////////////////////////////////////////////////////////////////////////
这里需要特别提一下这两个参数
pic_width_in_mbs_minus1 = 21
pic_height_in_mbs_minus1 = 17
分别表示图像的宽和高,以宏块(16x16)为单位的值减1
因此,实际的宽为 (21+1)*16 = 352
spsparser.rar
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
http //krdai.info.sixxs.org/blog/mp4-sps-pps-data.html
最近在做跟 h264 encode/decode 相关的研究,目标是希望可以从 Android 的 MediaRecorder 当中取出 h264 的资讯。目前问题是在于 SPS 以及 PPS 到底要怎样得到。由于 MediaRecorder 是写入 mp4 档案中,所以不得已只好来去分析一下 mp4 的档案格式,发现没有想象中的困难. 主要是参照 ISO/IEC 14496-15 这部份. 在 mp4 的档案之中, 找到 avcC 这个字串, 之后就是接上 AVCDecoderConfigurationRecord. AVCDecoderConfigurationRecord 的 format 如下:
aligned(8) class AVCDecoderConfigurationRecord {
unsigned int(8) configurationVersion = 1;
unsigned int(8) AVCProfileIndication;
unsigned int(8) profile_compatibility;
unsigned int(8) AVCLevelIndication;
bit(6) reserved = '111111'b;
unsigned int(2) lengthSizeMinusOne;
bit(3) reserved = '111'b;
unsigned int(5) numOfSequenceParameterSets;
for (i=0; i< numOfSequenceParameterSets; i++) {
unsigned int(16) sequenceParameterSetLength ;
bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
}
unsigned int(8) numOfPictureParameterSets;
for (i=0; i< numOfPictureParameterSets; i++) {
unsigned int(16) pictureParameterSetLength;
bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
}
}
对照一下这样就可以找到 SPS 和 PPS
+++++++++++++++++++++++++++++++++++++++++++++
vlc没有收到pps和sps
2010-10-08 16:16
问题 packetizer_h264 packetizer warning: waiting for SPS/PPS
是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame;
h264 packetizer has set so, that it sends sps/pps only first keyframe,
I'm trying to figure what breaks if that is changed so sps/pps is written in every keyframe.
[出自| http //trac.videolan.org/vlc/ticket/1384]
解决办法:
1、编码器编码出每个关键帧都加上SPS、PPS ,据说通常情况编码器编出的 SPS、PPS是一样的,所以这种方法耗费资源。
2、在服务器接收到客户端请求时,发送第一个package 加上 SPS、PPS。
具体如下:
1、在 VideoOpenFileSource 添加一个变量 isFirstFrame;
2、构造时初始化 isFirstFrame = true;
3、在int VideoOpenFileSource::readFromBufferChain() 修改如下:
1 if(isFirstFrame == true)
2 {
3 memcpy(fTo, h264_header, sizeof(h264_header)); /* h264_header = pps +sps*/
4 offset = sizeof(h264_header);
5 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
6 offset += framesize;
7 isFirstFrame = false;
8 printf("this is the first fime\n");
9 sleep(1);
10 }
11 else
12 {
13 framesize = BufferChain_get(fInput.video_bufs, fTo + offset);
14 offset += framesize;
15 }
1
[http //topic.csdn.net/u/20100801/17/ef35e664-92ff-4144-a35f-3984dcf11da3.html| 参考]
========================================================================
sdp 关于pps和sps的疑问:
packetization-mode 主要是定义包的模式,单一 NALU单元模式(0);非交错(non-interleaved)封包模式(1);交错(interleaved)封包模式(2)
sprop-parameter-sets 等于H.264 的序列参数集和图像参数 NAL单元,base64转换;(即= sps+pps)
profile-level-id 这个参数用于指示 H.264 流的 profile 类型和级别。这知道这个是啥东东
ffmpeg decode 关于pps sps问题:
stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodec/3500432#3500432
如何用C语言取出H.264ES文件里的nal(sps,pps)信息。比如width, height, profile等等
请高手指点指点。。。 http //www oschina.net/question/225813_35707
解析sps,pps的代码在ffmpeg里面就有, 抄出来就行了, 我以前也自己写过...
ffmpeg的libavcodec/h264_parser.c,
h264_ps.c
函数
ff_h264_decode_seq_parameter_set
ff_h264_decode_picture_parameter_set
自己可以看代码.
H264参数语法文档: SPS、PPS、IDR http //blog.csdn.net/heanyu/article/details/6205390
H.264码流第一个 NALU 是 SPS(序列参数集Sequence Parameter Set)
对应H264标准文档 7.3.2.1 序列参数集的语法进行解析
⑤ 用python代码怎么批量判断MP4是否损坏
你可以考虑下面的方案:
打开MP4格式的视频文件;读取上述打开的视频文件中的metadata信息,取得每个BOX的大小;将所有取得的BOX的大小进行相加,得到该视频文件的理论大小 s0;读取文件系统中MP4格式视频文件的大小 s1;比较s0与s1值的大小;如s0 > s1,则说明上述视频文件损坏,将该视频损坏信息记录到日志中;如s0 = s1,则说明视频文件未损坏;则读取下一条视频。
⑥ Python3读取大文件的方法
1.方法一:利用yield生成器
2. 方法二:利用open()自带方法生成迭代对象,这个是一行一行的读取
总结:二者的比较
方法一:可以灵活控制一次读取的size,在速度上较2有优势,适用于一些大的二进制文件,比如读取一些大的视频或者图片等。
方法二:在处理一些文本的时候感觉更加便利,按行读更容易对文本进行处理。