Python讀檔案:npy/npz/pcap包/大規模pcap包等
阿新 • • 發佈:2021-06-30
readlines()
這種方法讀取的文字內容,每行文字末尾都會帶一個'\n'換行符 (可以使用L.rstrip('\n')去掉換行符)
首先需要open函式開啟檔案 指定路徑 以及mode
mode常用的模式:
r:表示檔案只能讀取
w:表示檔案只能寫入
a:表示開啟檔案,在原有內容的基礎上追加內容,在末尾寫入
w+:表示可以對檔案進行讀寫雙重操作
f = open('/home/karma/Documents/liebiao.txt','r') #返回一個列表 list = f.readlines() list =list[:100] for line in list: line = line.split('\n')[0] print(type(line)) f.close()
open方法有個缺點,就是每次開啟檔案之後 需要用close方法關閉,因此有更好的with方法:
with open('/home/karma/Documents/liebiao.txt','r') as f:
#f為一個列表
list = f.readlines()
list =list[:100]
for line in list:
line = line.split('\n')[0]
print(type(line))
readline()方法
readline方法從檔案中讀取整行,包括換行符'\n'。
換行符(\n)留在字串的末尾,如果檔案不以換行符結尾,則在檔案的最後一行省略,這使得返回值明確無誤。
如果 f.readline() 返回一個空的字串,則表示已經到達了檔案末尾,而空行使用 '\n' 表示,該字串只包含一個換行符。
with open('a.txt') as f:
while True:
print(f.readline())
讀npz / npy檔案
import numpy as np a=np.load("D:\\code\\test\\extract_120_10.npy",allow_pickle=True).item()#返回dict X= np.array(a['feature']) y=np.array(a['label']) y=y[y<101]#篩選條件
其中item()作用
取出單元素張量的元素值並返回該值,保持原元素型別不變。,即:原張量元素為整形,則返回整形,原張量元素為浮點型則返回浮點型,etc.
讀pcap包
方法1 rdpcap
是整個把pcap包讀進記憶體,並且讀完檔案不會自動關閉檔案,需要手動關閉
import scapy
from scapy.all import *
packets =rdpcap('C:/Users/XXX\\Desktop\\test.pcap')
for packet in packets:
if(packet.haslayer('IP')):
...
方法2:PcapReader
這個方法一次性讀一個packet,不用把整個pcap包讀進記憶體(比如有pcap包大小達到幾個GB),並且可以實現訪問完pcap包關閉的功能
import scapy
from scapy.all import *
from scapy.utils import PcapReader
import time
import constants
import os
data_path ='C:\\Users\\XXX\\Desktop\\Data'#資料夾路徑
files = os.listdir(data_path)#讀入
num_files = len(files)#統計資料夾中檔案數目
try:
for i in range(num_files):
s1 = PcapReader('C:/Users/XXX\\Desktop\\Data\\test'+str(i+1)+'.pcap')
while True:
packet = s1.read_packet()
if packet is None:#需要注意的是 這裡修改scapy包的原始碼了,把raise EOFError改成了 return None
break
print(packet.time)
s1.close()
time.sleep(5)
print("等幾秒AAAAAAAA")
except :
print("發生異常")