Txt文件讀寫處理Python
歡迎閒逛~~~
1.Txt讀取
以Aminer-Paper文件爲例,這個文件網上隨便一搜就有
這裏的dir是自己設置的默認路徑
1.按照字節讀取
with open(os.path.join(dir, 'Aminer-Paper.txt'), 'r', encoding='UTF-8') as f:
line = f.read(3) #3表示字節數
print(line)
輸出:
#in
2.按照行讀取
with open(os.path.join(dir, 'Aminer-Paper.txt'), 'r', encoding='UTF-8') as f:
line = f.readline()
print(line)
輸出:
#index 1
3.讀取整個數據
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
line=f.readlines() #注意這裏是readlines
print(line)
輸出:
#index1
....(文件太大,不建議這樣讀取)
4.按照行讀取,查看前幾行數據
with open(os.path.join(dir, 'AMiner-paper.txt'), 'r', encoding='UTF-8') as f:
for i, line in enumerate(f): #注意這裏的i是行數,line是值
if i<4
print(line)
輸出:
#index 1
#* Book Review: Discover Linux
#@ Marjorie Richardson
2.Txt文件讀寫r,w,a的使用
讀:r
寫:w 這裏的寫是在文件內寫入,覆蓋先前存在的內容
追加:a 這裏的追加是在先前存在的內容後寫入
可讀可寫:r+ 文件不存在會報錯
可讀可寫:w+ 文件不存在會創建
可寫可追加:a+ 文件不存在會創建
二進制文件加b:rb wb abrb+ wb+ ab+
舉個例子:在原有文件A後追加文件B前10行的內容
h=open('C:/Users/Totoroyun/Desktop/A.txt','a+') #注意這裏a+是可寫可追加
f=open('C:/Users/Totoroyun/Desktop/B.txt','r') #注意這裏r是可讀
for i, line in enumerate(f): #行和value
if i <10:
h.write(line)
f.close()
h.close()
A文件先前的內容:
B文件的內容:
追加之後A的內容:
3.Txt文件處理
1.獲取特定格式的數據
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
for i, line in enumerate(f):
if i<100:
if 'index' in line:
print(line)
輸出是前100行中帶有index的行數據
2.獲取特定數據,並規整
with open(os.path.join(dir, 'AMiner-Paper.txt'), 'r', encoding='UTF-8') as f:
dict_list = []
c_dict = {}
for i, line in enumerate(f):
c_line = line.strip()[1:].strip() #默認刪除空白符(包括'\n', '\r', '\t', ' ')
if len(c_line)<1: #這裏主要用來判斷空行,index之間以空行隔開了(只適用於本例)
if len(c_dict)>0:
dict_list += [c_dict] #將賦值的字典放到list裏面
c_dict = {}
else:
c_frag = c_line.split(' ') #將每行按照空格分開
c_dict[c_frag[0]] = ' '.join(c_frag[1:]) #賦值key和value
paper_df=pd.DataFrame(dict_list) #將txt轉爲DataFrame格式的文件,之後可以重命名文件的列名
paper_df.rename({'o': 'Affiliation',
'%': 'Reference',
'*': 'Title',
'@': 'Authors',
'c': 'Journal',
't': 'Year',
'index':'Index'},axis=1,inplace=True)
以上是基本的txt操作,現實生活中也會碰到txt內容混亂的情況,這個時候我們可以通過正則表達式去提取想要的信息,若是以後處理這樣的數據,我會及時更新噠~