1. 程式人生 > 其它 >Python讀檔案:npy/npz/pcap包/大規模pcap包等

Python讀檔案:npy/npz/pcap包/大規模pcap包等

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("發生異常")