ython使用列表數據類型在順序索引中存儲多個數據。它的工作方式類似于其他編程語言的數字數組。filter()方法是Python的一種非常有用的方法。可以使用filter()方法從Python中的任何字符串、列表或字典中過濾一個或多個數值。它根據任何特定條件過濾數據。當條件返回true時,它將存儲數據,而返回false時將丟棄數據。本文通過使用不同的示例展示了如何在Python中過濾列表中的字符串數據。您必須使用Python 3+來測試本文的示例。
本示例說明了如何在不使用任何方法的情況下過濾字符串列表中的數據。 字符串列表在此使用另一個列表進行過濾。 在此,聲明了兩個列表變量,名稱分別為list1和list2。 使用list1的值過濾list2的值。 該腳本會將list2的每個值的第一個單詞與list1的值進行匹配,并打印list1中不存在的那些值。
#coding=utf-8
# 聲明兩個列表變量
list1=['Python', 'PHP', 'Java', 'Bash']
list2=['JavaScript是客戶端腳本語言',
'PHP是服務器端腳本語言',
'Java是一種編程語言',
'Kotlin是一種靜態編程語言']
# 根據第一個列表過濾第二個列表
filter_data=[x for x in list2 if
all(y not in x for y in list1)]
# 在過濾前和過濾后打印列表數據
print("第一個列表的內容:", list1)
print("第二個列表的內容:", list2)
print("過濾后的第二個列表的內容:", filter_data)
運行腳本。 在此,list1不包含單詞“Kotlin”。 輸出將僅包含list2中的一個值,即 ['Kotlin是一種靜態編程語言']。
如何在Python中過濾字符串列表
輸出如下:
第一個列表的內容: ['Python', 'PHP', 'Java', 'Bash']
第二個列表的內容: ['JavaScript是客戶端腳本語言', 'PHP是服務器端腳本語言', 'Java是一種編程語言', 'Kotlin是一種靜態編程語言']
過濾后的第二個列表的內容: ['Kotlin是一種靜態編程語言']
本示例說明如何使用另一個列表和自定義過濾器功能過濾字符串列表。 該腳本包含兩個名為list1和list2的列表變量。 自定義過濾器功能將找出兩個列表變量的公共值。
# 聲明兩個列表變量
list1=['100', '67', '39', '505', '122', '287', '399']
list2=['70', '100', '308', '415', '362', '230']
# 聲明一個函數來過濾第一個列表中的數據
def Filter(list1, list2):
return [n for n in list1 if
any(m in n for m in list2)]
# 在過濾器之前和之后打印列表數據
print("list1的的內容:", list1)
print("list2的的內容:", list2)
print("過濾后的數據",Filter(list1, list2))
運行腳本。 兩個列表變量中都存在100的值。 運行腳本后,將生成以下輸出。
list1的的內容: ['100', '67', '39', '505', '122', '287', '399']
list2的的內容: ['70', '100', '308', '415', '362', '230']
過濾后的數據 ['100']
通過使用前兩個示例中的all()和any()方法來過濾列表。 在此示例中,使用正則表達式從列表中過濾數據。 正則表達式是一種模式,通過該模式可以搜索或匹配任何數據。 Python中使用're'模塊在腳本中應用正則表達式。 在此,使用主題代碼聲明列表。 正則表達式用于過濾以“ CSE”開頭的主題代碼。 正則表達式模式中使用'^'符號在文本的開頭進行搜索。
# 導入re模塊以使用正則表達式
import re
# 聲明列表包含科目編號
sublist=['IDC-108', 'OKY-309', 'IDC-709', 'PHP-102', 'MIO-801']
# 聲明過濾功能
def Filter(datalist):
# 根據列表中的正則表達式搜索數據
return [val for val in datalist
if re.search(r'^IDC', val)]
# 打印過濾器數據
print(Filter(sublist))
運行腳本。 子列表變量包含兩個以“IDC”開頭的值。 運行腳本后,將顯示以下輸出。
['IDC-108', 'IDC-709']
本示例說明了使用lamda表達式從字符串列表中過濾數據。 在這里,名為search_word的列表變量用于從名為text的文本變量中過濾內容。 通過使用split()方法,基于空間將文本內容轉換為名為text_word的列表。 lamda表達式將忽略text_word中存在于search_word中的那些值,并通過添加空格將過濾后的值存儲在變量中。
# 聲明一個包含linuxidc_word中關鍵詞的列表
linuxidc_word=["系統", "linuxidc", "Python", "Kotlin"]
# 定義文本,從列表中搜索單詞
text="Linux公社 linuxidc 是專業的 Linux 系統 門戶網站,實時發布 最新 Kotlin 資訊!"
# 根據空格分割文本并將單詞存儲在列表中
text_word=text.split()
# 使用lambda表達式過濾數據
filter_text=' '.join((filter(lambda val: val not in linuxidc_word, text_word)))
# 在過濾前和過濾后打印文本
print("\n過濾前的文本:\n", text)
print("過濾后的文本:\n", filter_text)
運行腳本。 運行腳本后,將顯示以下輸出。
過濾前的文本:
Linux公社 linuxidc 是專業的 Linux 系統 門戶網站,實時發布 最新 Kotlin 資訊!
過濾后的文本:
Linux公社 是專業的 Linux 門戶網站,實時發布 最新 資訊!
filter()方法接受兩個參數。 第一個參數采用函數名稱或“ None”,第二個參數采用列表變量的名稱作為值。 filter()方法如果返回true,則從列表中存儲這些數據,否則將丟棄該數據。 在此,第一個參數值不指定任何值。 所有不為false的值將從列表中檢索為已過濾數據。
#聲明混合數據列表
listData=['linuxidc', 90, 9, 'com', 100, False, 22, True, '1']
# 使用None和列表調用filter()方法
filteredData=filter(None, listData)
#過濾數據后打印列表
print('過濾后的列表:')
for val in filteredData:
print(val)
運行腳本。該列表只包含一個false值,在過濾后的數據中將省略該false值。
當您需要從列表中搜索和檢索特定值時, 過濾非常有用。我希望上面的例子能幫助讀者理解從字符串列表中過濾數據的方法。
里主要是介紹下防止XSS的時機判斷,讓你明白XSS實質應該防止的位置
什么是XSS攻擊
它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意攻擊用戶的特殊目的。
XSS是黑客,惡意用戶常用的注入漏洞,也是網站安全要考慮的問題
以Think PHP3.2框架為例
框架為了防止XSS(跨站腳本, cross site script)危害. 用戶通過script腳本, 控制web頁面的行為. 采用的策略: 在接收到瀏覽器端數據后, 將數據轉換為HTML實體編碼
這是框架的默認策略, 很low, 現在幾乎不用該策略
在接收數據時, 就完成實體編碼轉換. 主要的問題, “數據庫中存儲的不在是原始數據了. 而是處理過之后的數據”.
html實體編碼后的數據
目前的策略是:
在數據輸出到頁面時, 才進行html實體編碼轉換.
都是使用HTML實體編碼轉換, 但是, 時機不同. 合理的策略是輸出時. 而不是輸入時.
原因: script腳本, 只有在瀏覽器端運行, 才有執行意義. 存儲在數據庫中,沒有任何危害!
數據庫中不知道用戶到底真正輸入的是什么!
方案:
關閉, 輸入時, 自動實體編碼處理
將默認的過濾器關掉
將過濾方法默認為空
輸出時, 對可能發生的注入字段, 進行過濾:
模板中完成:
在需要的字段文章添加過濾
效果:
數據中, 存儲的是原始數據, 未轉換編碼的數據
保存的是原始數據
輸出時, 數據為實體編碼:
詳細講解太長,再簡單說一下對于Html編輯器的XSS的處理 應該是另一個方式
原因:
其他字段, title字段, 輸出時, 直接轉換為實體標記即可.
但是, 對于描述這種html編輯器的內容. 輸出時不能直接轉換. 因為 html代碼, 對于數據是有意義的.
處理方案: 將內容中的script部分, 轉換成實體. 非script部分, 不去處理.
實現:
自定義一個過濾器函數
使用正則替換實現,只對script標簽進行處理
定義成一個方法,再需要選擇的時候選用該函數
結果
數據庫中的數據:
輸出時:
本文主要是介紹XSS防止時機,更多相關資料可以聯系
實現 HTML 壓縮,可以使用 JavaScript 中的正則表達式來去除 HTML 中的空格和注釋。以下是一個簡單的 HTML 壓縮函數:
function compressHTML(html) {
// 去除注釋
html=html.replace(/<!--[\s\S]*?-->/g, "");
// 去除多余空白
html=html.replace(/\s+/g, " ");
// 去除標簽之間空格
html=html.replace(/>\s+</g, "><");
return html.trim();
}
該函數首先使用正則表達式去除 HTML 中的注釋。然后,它使用另一個正則表達式去除 HTML 中的多余空格。最后,它使用另一個正則表達式去除標簽之間的空格。
為了測試該函數,您可以創建一個 HTML 文件,并在其中添加一些冗余的空格和注釋。例如:
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<!-- This is a comment -->
<h1> Welcome to my website! </h1>
<p> This is some text. </p>
</body>
</html>
然后,您可以在Node.JS中使用以下代碼將 HTML 文件加載為字符串并壓縮它:
// 加載 HTML 文件
const fs=require("fs");
const html=fs.readFileSync("index.html", "utf8");
// 壓縮 HTML
const compressedHtml=compressHTML(html);
console.log(compressedHtml);
輸出是一個壓縮后的 HTML 字符串,其中不包含注釋或冗余空格。
或者直接在IE中測試,代碼如下:
function compressHTML(html) {
// 去除注釋
html=html.replace(/<!--[\s\S]*?-->/g, "");
// 去除多余空白
html=html.replace(/\s+/g, " ");
// 去除標簽之間空格
html=html.replace(/>\s+</g, "><");
return html.trim();
}
var html=`
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
</head>
<body>
<!-- This is a comment -->
<h1> Welcome to my website! </h1>
<p> This is some text. </p>
</body>
</html>
`;
console.log(compressHTML(html));
運行效果:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。