Python基礎匯總001_txt文件讀寫、字典使用等


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

控制台輸出:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM