文件操作(打开,追加内容,读文件)

##文件操作
##打开一个输出文件,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()##关闭文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章