文件操作(打開,追加內容,讀文件)

##文件操作
##打開一個輸出文件,output a file
##或者直接引用地址,不過是 '''path'''
##以“w”寫的方式打開一個文件,如果沒有,則先寫一個空文件
out_file = open("E:/py_learning/out_1.txt","w")##注意,在windows下,要把以\進行分割的路徑改成以"/"爲分割的路徑,爲了避免與轉義字符衝突
##循環判斷,取偶數放入文件中
for i in range(1,101):
    if i % 2 == 0:
        out_file.write(str(i)+"\n")##對文件進行寫入,且每寫以此,就換行
out_file.close() ##關閉文件
##這時你相應的目錄下就會out_1.txt這個文件
##如果現在已經有文件了,"a"表示追加模式,就是向之前文件中追加內容
out_file = open("E:/py_learning/out_1.txt","a")
for i in range(200,300):
    if i % 2 == 0:
        out_file.write(str(i)+"\n")
out_file.close()
##讀文件,load a file
in_file = open("E:/py_learning/out_1.txt","r")
##相當於每次從要讀的文件中讀一行
line=in_file.readline()
sum_value = 0
## 當line讀到最後爲空集時,循環結束,文件讀取完畢
while line != "":
    sum_value +=int(line.strip())##去除每一行最後的換行符,把
    line=in_file.readline() ##繼續讀下一行內容
in_file.close()##循環最後不要忘記關閉文件了
print(sum_value)
in_file = open("E:/py_learning/out_1.txt","r")
##這種方法可以以此把文件所有行都讀入,但是,若文件過大,很難打開,更難進行後續操作
line=in_file.readlines()
in_file.close()
print(line)
##兩種操作文件方式 1:open,close
in_file = open("E:/py_learning/out_1.txt","r")
sum_value=0
for line in in_file:##每次只讀一行
    value=int(line.strip())
    sum_value+=value
    sum_value
in_file.close()
print(sum_value)
##兩種操作文件方式 2:with open 不用關閉,默認結束自動關閉
with open("E:/py_learning/out_1.txt","r") as in_file:
    sum_value=0
    for line in in_file:
        sum_value += int(line.strip())
    print(sum_value)
with open("E:/py_learning/out_1.txt","r") as in_file:
    line_list = in_file.readlines()##此時指針已經閱讀完畢,in_file=0
    sum_value=0
    for line in in_file:
        sum_value += int(line.strip())
    print(sum_value)##0
with open("E:/py_learning/birthday_file1.txt","r") as in_file:
    header=in_file.readline()
    for line in in_file:
        print(line)
print(header)##header本來就有換行符,print又加一個換行符,會輸出兩個換行符
##把文件打開,表頭信息首先讀取到一個變量值,每一行讀入都以製表符分割,並打印出來
with open("E:/py_learning/birthday_file1.txt","r") as in_file:
    header=in_file.readline()
    file_count =0
    for line in in_file:
        file_count+=1
        line_list=line.strip().split("\t")##對每一個字符串,首先去除末尾的符號,然後以製表符把兩個數據分開
        print(line_list)
##優化,使代碼更優美
with open("E:/py_learning/birthday_file1.txt","r") as in_file:
    header=in_file.readline()
    ##只要文件名有enumerate,就會有兩個返回值,第一個值index,第二個值就是之前的值,就是文件本身
    for line_index,line in enumerate(in_file):
        line_list=line.strip().split("\t")
        print(line_list+[line_index])
##merge table
birth_1_dict={}##生成一個空字典
##打開一個文件
with open("E:/py_learning/birthday_file1.txt","r") as in_file:
    header=in_file.readline() ##表頭信息先存放一個變量中
    for line in in_file:
        line_list=line.strip().split("\t")##與之前類似,拆分變量
        birthday = line_list[0] ##分別把兩個值放在兩個變量中
        name=line_list[1]
        ##判斷目前的字典中是否存在該生日信息
        ##如果不存在
        if birth_1_dict.get(birthday) == None:
            ##給字典賦值,key-value
           birth_1_dict[birthday] = [name] 
        else:
           birth_1_dict[birthday].append(name) ##如果存在,則直接在後面添加一個姓名
           ##打印出當前字典信息
for key in birth_1_dict.keys():
    print(key,birth_1_dict[key])
    ##打開另一個文件,判斷是否存在overlap
outfile = open("E:/py_learning/birthday_overlap.txt","w")
with open("E:/py_learning/birthday_file2.txt","r") as in_file2:
    header2=in_file2.readline()##存表頭信息
    for line in in_file2:
        birthday,name = line.strip().split("\t")##分割,形成一個列表
    ##如果此生日在之前的字典中存在值,即非None
    ##一定要注意縮進!!!!
        if birth_1_dict.get(birthday) != None:
            ## 則把兩個文件的姓名id先連在一起
            out_name_list =birth_1_dict[birthday]+[name]
            ##使用","join可以把list轉化爲string,因爲寫文件要寫string類型
            out_string = birthday+"\t"+",".join(out_name_list)
            outfile.write(out_string+"\n")
        
outfile.close()##關閉文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章