python文件操作
python的read(),readline(),readlines()
这三个方法大家应该很熟悉了,都是python操作文件的常用方式。他们的区别在于
read(),默认读取全部文件。
readline(),默认按行读取
readlines(),按行读取,并把每行数据作为一个字符串加入一个列表中。
def ReadFile(): with open("foo.txt",mode="r",encoding="utf-8") as f: txt = f.read() print(txt) def ReadlineFile(): with open("foo.txt",mode="r",encoding="utf-8") as f: i = 1 while True: i += 1 txt = f.readline() print(i,txt) if not txt: print("读完了") break def ReadlinesFile(): with open("foo.txt",mode="r",encoding="utf-8") as f: txt = f.readlines() print(txt) if __name__ == '__main__': ReadFile() ReadlineFile() ReadlinesFile() fasdfasdfjdsahjk adshfkjalksdfl;adskf sdakfhjalksdjf fkjalskdmclak sadkfnjlkasndkl asdbfnkjasnda sdfkjlnasljdnlsank;fd sdjnlkasn ;akrpi;nak;l fjkbgiherkbfdljsahfoajk ehjfgoukjabdsjv,kbhalsd jfhhgoueihbrvkfanvb sdkfjlva fdjvdbfkvabheoslfjnkdbfv fbvkelairlvkbkadn;lkna,jdfk.lkmcv fbvkuierknvbbdfjjvmnkajs bifvkubjfjm,nvkjsbkhfbvnjosdlnm erolivnkdnmbnljvakndhfbvoajlnxb dkjlfhvld dfgbouerjbvknmfsbnv,ns vsekrhbjpelbnvkdsfnvjsnkbvf ;eiroinfdfb kvsjnfvnoshdfjkvnfkhbvknv,ns fveosljbvnsnvkhsboreptinb vndv roenspjldfbvnmsdngpoerkblds eoghpoenbasjnpheopr[fd'v ofdhvpgerbvkdb.nvbihoueshvjdbhkvbsodflnvhjsbnfodjhbvhfjbsbfnvbj,fsbsjnbvoehripvlbnkhsbdo;vhsevouhrtouhbvksdfbn,,nfbge eourtbkjsbnfbvol;wehpifhbeisbfnbvlq;p'erhvpnfs 'ejbvewjsbfbvoqeipjgpiobvhjsbvklajndpvhelvnkjfbksnkep;fjvnbksl;v edvoels;dnb vlsnbairopijvokdbnva bckvb[ie'f 1 fasdfasdfjdsahjk 2 adshfkjalksdfl;adskf 3 sdakfhjalksdjf 4 fkjalskdmclak 5 sadkfnjlkasndkl 6 asdbfnkjasnda 7 sdfkjlnasljdnlsank;fd 8 sdjnlkasn ;akrpi;nak;l 9 fjkbgiherkbfdljsahfoajk 10 ehjfgoukjabdsjv,kbhalsd 11 jfhhgoueihbrvkfanvb sdkfjlva 12 fdjvdbfkvabheoslfjnkdbfv 13 fbvkelairlvkbkadn;lkna,jdfk.lkmcv 14 fbvkuierknvbbdfjjvmnkajs 15 bifvkubjfjm,nvkjsbkhfbvnjosdlnm 16 erolivnkdnmbnljvakndhfbvoajlnxb dkjlfhvld 17 dfgbouerjbvknmfsbnv,ns vsekrhbjpelbnvkdsfnvjsnkbvf 18 ;eiroinfdfb kvsjnfvnoshdfjkvnfkhbvknv,ns 19 fveosljbvnsnvkhsboreptinb vndv 20 roenspjldfbvnmsdngpoerkblds 21 eoghpoenbasjnpheopr[fd'v 22 ofdhvpgerbvkdb.nvbihoueshvjdbhkvbsodflnvhjsbnfodjhbvhfjbsbfnvbj,fsbsjnbvoehripvlbnkhsbdo;vhsevouhrtouhbvksdfbn,,nfbge 23 eourtbkjsbnfbvol;wehpifhbeisbfnbvlq;p'erhvpnfs 24 'ejbvewjsbfbvoqeipjgpiobvhjsbvklajndpvhelvnkjfbksnkep;fjvnbksl;v 25 edvoels;dnb vlsnbairopijvokdbnva bckvb[ie'f 26 读完了 ['fasdfasdfjdsahjk\n', 'adshfkjalksdfl;adskf\n', 'sdakfhjalksdjf\n', 'fkjalskdmclak\n', 'sadkfnjlkasndkl\n', 'asdbfnkjasnda\n', 'sdfkjlnasljdnlsank;fd\n', 'sdjnlkasn ;akrpi;nak;l\n', 'fjkbgiherkbfdljsahfoajk\n', 'ehjfgoukjabdsjv,kbhalsd\n', 'jfhhgoueihbrvkfanvb sdkfjlva\n', 'fdjvdbfkvabheoslfjnkdbfv\n', 'fbvkelairlvkbkadn;lkna,jdfk.lkmcv\n', 'fbvkuierknvbbdfjjvmnkajs\n', 'bifvkubjfjm,nvkjsbkhfbvnjosdlnm\n', 'erolivnkdnmbnljvakndhfbvoajlnxb dkjlfhvld\n', 'dfgbouerjbvknmfsbnv,ns vsekrhbjpelbnvkdsfnvjsnkbvf\n', ';eiroinfdfb kvsjnfvnoshdfjkvnfkhbvknv,ns\n', 'fveosljbvnsnvkhsboreptinb vndv\n', 'roenspjldfbvnmsdngpoerkblds\n', "eoghpoenbasjnpheopr[fd'v\n", 'ofdhvpgerbvkdb.nvbihoueshvjdbhkvbsodflnvhjsbnfodjhbvhfjbsbfnvbj,fsbsjnbvoehripvlbnkhsbdo;vhsevouhrtouhbvksdfbn,,nfbge\n', "eourtbkjsbnfbvol;wehpifhbeisbfnbvlq;p'erhvpnfs\n", "'ejbvewjsbfbvoqeipjgpiobvhjsbvklajndpvhelvnkjfbksnkep;fjvnbksl;v\n", "edvoels;dnb vlsnbairopijvokdbnva bckvb[ie'f\n"]
python处理大文件(超过1G)
处理大文件时候可以设置偏移量,开启多个协程来同时处理文本。seek()方法可以设置偏移量问题。
file.seek()方法格式:
seek(offset,whence=0) 移动文件读取指针到制定位置
offset:开始的偏移量,也就是代表需要移动偏移的字节数。
whence: 给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头算起,1代表开始从当前位置开始算起,2代表从文件末尾开始算起。当有换行时,会被换行截断。 seek()无返回值,故值为None
def ReadFile(): with open("foo.txt",mode="rb") as f: # f.seek(10,0) #设置起读位置,0表示从头开始偏移10个。使用seek注意要使用rb来读取。 # print(f.tell()) #获取起读位置的坐标 # f.seek(11,1) #1表示从上一次偏移量在便宜11个 # print(f.tell()) f.seek(-13,2) #2表示从文本末尾开始算偏移量 while True: txt = f.read(40) #每次读1024字节 print(txt.decode()) if not txt: break