打开文件: f = open("文件路径/文件名.文件格式",mode="r",encoding="utf-8") f 可以看成一个可以操作文件的句柄. 文件路径分: 相对路径,绝对路径. 相对路径: 相对的是你当前程序所在的文件夹.(如果要从当前文件夹出来用../命令, ../返回上一级目录.) 绝对路径: 1.从磁盘根睡目录找 2.互联网上的绝对路径. 还可以用 with open("文件路径",mode="") as f:#此处以,结尾.这个命令可以接多个文件. 这样打开文件可以不用f.close()关文件.
读"r". f = open("文件名","r") ret = f.read() f.close()#打开文件进行操作后都要记得关闭. 在读的模式下没有这个文件会报错. f.readline()#读一行,会读取换行,行间有空行是正常的. f.readlines()#读取多行,相当于一次全部读出来. 因为文件句柄本来就是可以迭代器 所以可以用for循环 for line in f: 可以计数来读取想要的行
写"w". f = open("文件名","w",encoding="utf-8") f.write("要写入的内容") f.flush()#刷新的意思(一种好的习惯而已) f.close() 在写模式下如果当前目录文件不存在会自动创建文件夹并写入内容.(但如果文件名前加了没有存在的路径就不可以,会报错) w模式在写入之前会清掉之前的内容.(文件操作只要见到"w"都会这样.)
追加"a" f = open("文件名","a",encoding="utf-8") f.write("要写入的内容")#"a"就是append的意思,就是有写文件的时候不会覆盖前面的内容后追加到后面. f.flush() f.close() 追加是一种写模式.
"rb" f = open("文件名",mode="rb")#此处encoding没用,直接读到的就是字节. ret = f.read() f.flush() f.close() print(ret)#结果如‘\xe5\xa5\xbd\xe7\x9a\x84\xe6‘ print(ret."utf-8")可以用这种方法得到解码的后文件内容. b是字节的意思 即此模式是读取字节(byte)
"wb" f = open("文件名","wb") f.write("你好")#这样是写不进的,会报错,必须先编码,因为是对字节进行操作. f.write("你好".encode="utf-8")#这样先编码才行. f.flush() f.close() 因为写进去是字节,在pycharm里用utf-8打开就会还原成原的写了字符. 见w写入都会被覆盖.
打开非文本的东西有带"b"的模式,如图片,视频之类的. "r" "w" "a" "rb" "wb" "ab"
"r+" f = open("文件名",mode="r+")#先读后写是对读模式的扩展. f.read(3)#如果先写后读,写入的会覆盖之前的(因这光标开始默认在顶格.会从光标所在位置往后写) f.write()#此处传参数表示读几个字符(注意:不是字节).#继续读的话光标会接着往后读. f.flush()#但是你要写,"r+"模式只要你读一次,不管读几个字节,都会默认光标到末尾. f.close() 这种模式先读后写才是安全的.
"w+" f = open("文件名",mode="w+")#先写后读是对写模式的扩展. f.write()#只要有w就会先清空原来的内容 f.read()#此处读的话会读不到内容,因为光标在末尾.要想读到内容要用f.seek()移动光标再读. f.flush() f.close() 这种模式一般不用.
如果要写入的文件有路径,一般先看路径和文件夹是否存在,如果存在直接写,如果不存在就创建路径和文件夹. import os srcfile = "D://test/foot.txt" fpath,fname = os.path.split(srcfile)#分离路径和文件名. if not os.path.exists(fpath): os.makedirs(fpath) f = open("fname","w") f.write("写入的内容") f.flush() f.close()