1.利用python讀取文件
(1)Python引入了with
語句來自動幫我們調用close()
方法
<1>讀取指定路徑下的文件
with open('/path/to/file', 'r') as f: print(f.read())
<2>寫文件
with open('/Users/michael/test.txt', 'w') as f: f.write('Hello, world!')
(2)Python 按行讀取txt文件,並放入列表中(掌握)
每次只讀取和顯示一行,適用讀取大文件
file = open("../aspect_ner_csv_files/aspect_words.txt","r",encoding="utf-8") word_list=[] for line in file: word_list.append(line.strip()) #將每一行文件加入到word_list列表中 file.close() print(word_list)
控制台輸出:
(3)讀取txt文件,刪除重復行
#讀取文件 total_stopwords = open('stopwords_txt/total_stopwords.txt', 'r',encoding="utf-8") total_stopwords_after_filter = open('stopwords_txt/total_stopwords_after_filter.txt', 'w',encoding="utf-8") new = [] #計算變量 count_total_stopwords=0 count_total_after_filter=0 #利用for循環讀取每一行 #去重 for line in total_stopwords.readlines(): count_total_stopwords+=1 #行數+1 if line not in new: #去重 count_total_after_filter+=1 new.append(line) total_stopwords_after_filter.writelines(line) total_stopwords.close() total_stopwords_after_filter.close() print(count_total_stopwords) print(count_total_after_filter)
控制台輸出:
(4)將變量按行寫入txt文本中
如果要按行寫入,我們只需要再字符串開頭或結尾添加換行符'\n'即可:
f = open('../aspect_ner_csv_files/test_biaozhu_pos.txt', 'a', encoding='utf-8') f.write('\n' + words_bmeso_pos) f.close()
(5)pandas文件讀取數據,寫入txt中
從pandas的dataframe中,逐行讀取某列的數據,經過分詞后,將reviews變量逐行寫入
Python open() 函數用於打開一個文件,並返回文件對象,在對文件進行處理過程都需要使用到這個函數,如果該文件無法被打開,會拋出 OSError。
注意:使用 open() 函數一定要保證關閉文件對象,即調用 close() 函數。
open函數的參數列表:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
參數說明:
- file: 必需,文件路徑(相對或者絕對路徑)。
- mode: 可選,文件打開模式
- buffering: 設置緩沖
- encoding: 一般使用utf8
- errors: 報錯級別
- newline: 區分換行符
- closefd: 傳入的file參數類型
模式 | 描述 |
---|---|
t | 文本模式 (默認)。 |
x | 寫模式,新建一個文件,如果該文件已存在則會報錯。 |
b | 二進制模式。 |
+ | 打開一個文件進行更新(可讀可寫)。 |
U | 通用換行模式(不推薦)。 |
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
rb | 以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。 |
r+ | 打開一個文件用於讀寫。文件指針將會放在文件的開頭。 |
rb+ | 以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。 |
w | 打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb | 以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。 |
w+ | 打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb+ | 以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。 |
a | 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
ab | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
a+ | 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。 |
ab+ | 以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。 |
for index,row in df.iterrows(): reviews=row['reviews'] review_split, review_pos, review_split_pos=fenci_and_pos(reviews) print(review_split) print(review_pos) print(review_split_pos) df.loc[index,'review_split']=review_split df.loc[index,'review_pos']=review_pos df.loc[index,'review_split_pos']=review_split_pos txt_id=1 review_split_txt_path='split_result_txt/split_txt_'+str(txt_id)+'.txt' f = open(review_split_txt_path, 'a',encoding='utf-8') f.write('\n' + review_split) f.close() df.to_csv('hotelreviews50_2129.csv', header=None, index=False) # header=None指不把列號寫入csv當中
2.列表生成式
li = [i ** 2 for i in range(1,11)] print(li)
輸出:
3.Counter
Counter是一個容器對象,主要的作用是用來統計散列對象
from collections import Counter lists = ['a', 'a', 'b', 5, 6, 7, 5] a = Counter(lists) print(a) # Counter({'a': 2, 5: 2, 'b': 1, 6: 1, 7: 1}) b=a.most_common(2) #輸出是一個集合 [('a', 2), (5, 2)] print(b) c=dict(b) #將集合轉化為字典 print(c) # 將上面的過程合並成一句話,其作用就是統計集合中的各個元素出現的次數,取出出現次數最多放入字典中 d=dict(Counter(lists).most_common(2)) print(d)
效果圖:
4.字典(dict)
(1)items 方法
Python 字典 items() 函數作用:以列表返回可遍歷的(鍵, 值) 元組數組。
dict = {'老大':'15歲', '老二':'14歲', '老三':'2歲', '老四':'在牆上' } print(dict.items()) for key,values in dict.items(): print(key + '已經' + values + '了')
控制台輸出:
(2)獲取字典的key列表和value列表
# -*- coding: utf-8 -*- # 定義一個字典 dic = {'劇情': 11, '犯罪': 10, '動作': 8, '愛情': 3, '喜劇': 2, '冒險': 2, '懸疑': 2, '驚悚': 2, '奇幻': 1} #通過list將字典中的keys和values轉化為列表 keys = list(dic.keys()) values = list(dic.values()) # 結果輸出 print("keys列表為:",end='') print(keys) print("values列表為:",end='') print(values)
控制台輸出:
5.統計列表中各種值數據出現的頻次
(1)利用字典自定義函數實現(必須掌握)
def get_counts(sequence): counts = {} for x in sequence: if x in counts: counts[x] += 1 else: counts[x] = 1 return counts
小案例:
list01=[1,1,2,22,3,3,-2,3,-34,1,1,2,2,2,2,22,-2,-2] dict01={} for i in list01: if i in dict01: dict01[i]+=1 else: dict01[i]=1 #對字典按value降序排列 a = sorted(dict01.items(), key=lambda x: x[1], reverse=True) print(a)
控制台輸出:
(2)dataframe格式的value_counts()
pos_count_series=df['review_pos'].value_counts() #統計review_pos列中各種值數據出現的頻次 print(pos_count_series) list_pos=pos_count_series.index #可以將其理解為列表 list_count=pos_count_series.values
控制台輸出: