① 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有優勢,適用於一些大的二進制文件,比如讀取一些大的視頻或者圖片等。
方法二:在處理一些文本的時候感覺更加便利,按行讀更容易對文本進行處理。