第陆行,使用函数json.load()从文件account.json中读取存款和储蓄的用户名。

  例如,大家创造三个文书,并将一首古诗词存于当中,然后读取整个文件内容。文本文件中的内容如下所示:

  即使上述措施也兑现了作者们的须求,可是使用open()和close()来开辟和关闭文件时,假诺程序存在bug,则会导致close()方法未执行,文件将不会被关门。那类似鸡毛蒜皮,但为安妥的关门文件,恐怕会促成数据丢失或受损。如若在先后中太早的选取close()方法关闭文件,那么在要求时以不恐怕访问,那也会招致越多的错误。由此,以上代码能够利用另一种完结格局。

1 Please enter your username:YunQtian
2 Welcome to  YunQtian !
1 Welcome back, YunQtian !

  运转结果:

  第三行,创制七个0到9的数字列表,并赋值给变量list_numbers。

1 y = 10
2 x = 0
3 z = y / x
4 print(z)

  运维结果:

4.2.1 保存用户生成的数据

 1 import  json
 2 
 3 username = input("Please enter your username: ")
 4 password = input("Please enter your password:")
 5 
 6 filename = r"text_files\account.json"
 7 with open(filename,'w',encoding="utf-8") as file_object:
 8     json.dump(username,file_object)
 9  print("Welcome!")
1 Welcome back, YunQtian !
1 import  json
2 
3 list_numbers = [ i for i in range(10)]
4 print(list_numbers)
5 
6 filename = r'text_files\list_numbers.json'
7 with open(filename,'w') as file_object:
8     json.dump(list_numbers,file_object)

  运营结果:

  

3.2  try-except代码块的利用

  代码:

  第叁行,使用close()方法关闭文件。

  在Python中,要是大家想分析多个公文文件,那么可以调用函数count_words()来实现。

 1 import  json
 2 
 3 '''
 4  如果文件以及存在该用户,则加载它;反之,提示用户输入,并保持它
 5 '''
 6 
 7 filename = r"text_files\account.json"
 8 try:
 9     with open(filename,'r',encoding="utf-8") as file_object:
10         username =json.load(file_object)
11 except FileNotFoundError:
12     username = input("Please enter your username:")
13     with open(filename,'w',encoding="utf-8") as file_object:
14         json.dump(username,file_object)
15         print("Welcome to ",username,"!")
16 else:
17     print("Welcome back,",username,"!")

  第26行,调用函数greet_user()。

  第14~24行,第三1个函数greet_user(),倘使成功的获得了用户名,就打字与印刷一条欢迎用户回来的问候语,反之,指示用户输入其用户名。

  代码:

  说明:

  在Python中,使用主要字with时,函数open()重返的文本对象只在with代码块内能够用。借使要在走访文件的内容,可在with代码块内将文件的各行存款和储蓄在二个列表中,并在with代码块外使用列表。

  函数greet_user()所做的不光是致敬用户,还在存款和储蓄了用户名时获取它。而在未曾存款和储蓄用户名时提示用户输入三个。未来我们先河重构greet_user(),让他不实施那么多任务。为此,作者第①将获取存储的用户名的代码移到另一个函数中。

  例如,编写三个程序,让用户依据提示输入多少个数,然后求商。

 

 

  运营结果:

  从以上结果可推知,从第贰遍完后,每一遍执行的结果都一模一样。因为文件以及存在,每一回运转都从文件中读取。

 

1 The file  text_files\alice.txt has about  28753 words.
1 Sorry,the file  test_file does not exist.

  以上文件正是分析文件的经过中尚无找到的文件。

3.4  FileNotFoundError异常

1 with open(r"text_files\test_file2","r",encoding="utf-8") as file_object:
2     lines = file_object.readlines()
3 for line in lines:
4     print(line.rstrip())

4.1.2  函数json.load()的应用

 

  运营结果:

  在Python中,格外是运用try-except代码块处理的。try-except代码块让Python执行内定的操作,同时告诉Python发生特别时应怎样处理。使用了try-except代码块时,尽管出现分外,程序也将一而再运营:突显我们编辑的温馨的失实新闻,而不是令用户迷惑的traceback。

 

  第一 、9行,都是注释的内容,那说明Python中注释能够行使多少个单引号将内容引起来照旧在每行内容前加#号,都可完结注释作用。

 

  从以上的运行结果能够,try中的代码引发了ZeroDivisionError非凡,由此Python提议了该怎么解决难题的except代码块,并运营当中的代码。

1 with open("test_file1",'r',encoding="utf-8") as file_object:
2     print(file_object.read())

1.1.5 使用文件中情节

  因为在Python中,反斜杠(\)被视为转义标记,所以,在Windows中为了确定保证万无一失,应该在文书的路劲的引号前加上r。

        念奴娇·赤壁怀古
        宋代:苏轼

大江东去,浪淘尽,千古风流人物。
故垒西边,人道是,三国周郎赤壁。
乱石穿空,惊涛拍岸,卷起千堆雪。
江山如画,一时多少豪杰。
遥想公瑾当年,小乔初嫁了,雄姿英发。
羽扇纶巾,谈笑间,樯橹灰飞烟灭。
故国神游,多情应笑我,早生华发。
人生如梦,一尊还酹江月。

3.5.1 单文本文件分析

 

  第4~5行,用for循环将每行都进入变量file_string,并删除每行末尾的换行符。

1.2.3  追加文件内容

  

  运营结果:

 

 

  说明:

  例如,用10除以0。

  模块JSON
中包罗七个函数json.dump和json.load()。当中等高校函授数json.dump()需求接受多个实参,即存款和储蓄的多少以及可用于储存数据的文本对象;函数json.load()只需接受需求读取其剧情到内部存款和储蓄器中的文件对象。

  例如,往文件test_file5.txt中写入一首诗。

1 while True:
2     first_number = input("请任意输入第一个数字:")
3     if first_number == "q":
4         break
5     second_number = input("请任意输入第二个数字:")
6     if second_number == "q":
7         break
8     answer = int(first_number) / int(second_number)
9     print("第一个数字除以第二数字等于:",answer)

  当大家想要将文件写入文件中时,大家须求在调用方法open()时给其提供另3个实参,告诉Python大家要写入打开的文书。

  运转结果:

  代码:

1 Please enter your username:YunQtian
2 Welcome to  YunQtian !
 1 def count_words(filename):
 2     """计算一个英文的文本大致包含多少个单词"""
 3     try:
 4         with open(filename, 'r', encoding="utf-8") as file_object:
 5             contends = file_object.read()
 6     except FileNotFoundError:
 7         # pass
 8         with open(filename_missing,'a',encoding="utf-8") as file_missing_object:
 9             file_missing_object.write(filename)
10     else:
11         # 计算英文文件大致包含多少个单词
12         words = contends.split()
13         nume_words = len(words)
14         print("The file ", filename, "has about ", str(nume_words),"words .")
15 filenames = [r'text_files\alice.txt',r'text_files\little_warrior.txt',r'text_files\moby_dick.txt',r'text_files\test_file.txt',r'text_files\siddhartha.txt']
16 filename_missing =r"file_missing.tex"
17 for filename in filenames:
18      count_words(filename)
        宿严陵钓台
    作者:神颖 朝代:唐代
寒谷荒台七里洲,贤人永逐水东流。
独猿叫断青天月,千古冥冥潭树秋。

  说明:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

3.1 处理ZeroDivisionError异常

  第③遍施行,已经存在该公文时,其运作结果如下:

 

  代码:

 

4.1.1  函数json.dump()的应用

1 请任意输入第一个数字:8
2 请任意输入第二个数字:9
3 第一个数字除以第二数字等于: 0.8888888888888888
4 请任意输入第一个数字:10
5 请任意输入第二个数字:0
6 Traceback (most recent call last):
7   File "F:/PyProject/s14/day3/test_except.py", line 10, in <module>
8     answer = int(first_number) / int(second_number)
9 ZeroDivisionError: division by zero

  例如,大家将贰个文本的始末读取后存入多个列表。

  运营结果 :

  第31行,用greet_user()打字与印刷一条符合的问候语。

  从以上运营结果中可见,由于try代码块引发那贰个,故跳到except代码块运营。

  第二遍施行,如若本人呢间不设有,运营结果如下:

  例如,打开二个不存的文件,看其运作结果。

  第23行,将要分析的公文的名称存到一个列表中,并在各样成分前加3个字母r。

  第伍行,打字与印刷列表内容,并用函数rstrip()去掉多余的空格。

 

  代码运转后的新文件内容如下所示:

  代码:

  从上述运维结果可以,由于文件不存在,在traceback中的最终一行报告了FileNotFoundError卓殊,那是Python找不到打开的文本时创设的老大。该尤其时出于函数open()导致的,因而要拍卖那一个荒唐,必须将try语句放在蕴含open()的代码行在此之前。

 

  例如,实现多文本分析,但先后非凡时让什么也不做,同时让用户无感知。

  运营结果:

  例如,将一首存于文本文件中,然后逐行读取,并打字与印刷。

       例如,使用try-except代码块和else代码块拍卖万分。

1. 文本操作

  执行后文件内容如下所示:

  第③遍执行,即使自己呢间不设有,运转结果如下:

  说明:

  第二行,调用方法write()将“西部日出南部雨,道是无晴却有晴。”写入文件中。

  运营结果:

1 Traceback (most recent call last):
2   File "F:/PyProject/s14/day3/test_except.py", line 5, in <module>
3     z = y / x
4 ZeroDivisionError: division by zero
《相思》
(唐代:王维)

红豆生南国,春来发几枝。
愿君多采撷,此物最相思。

1 filename = r"test_file"
2 try:
3     with open(filename,'r',encoding="utf-8") as file_object:
4          lines = file_object.read()
5          for line in lines:
6              print(line)
7 except FileNotFoundError:
8     print("Sorry,the file ",filename,"does not exist.")

  第2~14行,定义贰个用户问候的函数greet_user(),并将在此以前的diam全写入该函数中。

  在Windows中,文件路劲用的是反斜杠(\),而在Linux、Unix、OS
X等等其余系统中,文件的路劲用的是斜杠(/)。

1 with open(r"text_files\test_file1",'r',encoding="utf-8") as  file_object:
2     for line in file_object:
3         print(line.rstrip())

 

1 filename = r"test_file"
2 with open(filename,'r',encoding="utf-8") as file_object:
3      lines = file_object.read()
4      for line in lines:
5          print(line)

  说明:

 

  例如,从1.4.2.1保留的公文accoun.json中读取用户的用户名,并打印一条新闻。

  第贰行,用for循环遍历整个文件,逐行读取文件的内容。

  例如,大家创立二个空文件,然后往里面写入一些剧情。

 

 

  第壹行,关键字with会在不再须求拜访文件后将其关闭,因而,在全体代码中都并未出现close()方法的调用。

  运转结果:

  在Python中,打开文件时,大家得以内定以下三种方式:

1 try:
2     y = 10
3     x = 0
4     z = y / x
5     print(z)
6 except ZeroDivisionError:
7     print("You can't divide by zero!")

 

"YunQtian"

  代码:

  说明:

 

  说明:

  说明:

  第1行,“test_file1.txt” 是索要开拓的文件名称;‘r’
是以读的办法打开文件;encoding
钦定用什么样字符集打开,open()函数是用来开辟文件的宣示。

 

  从上述运维结果可见,我们如若想完毕多中国少年共产党享,能够行使json来促成。

  第22~29行,定义二个greet_user()函数,问候每一种用户,并建议其用户名。

  (2)w:写入情势。只好往打开的文本写内容,并且会清空文件中的内容,然后再写入。

  第拾行,以追加的方式,用utf-8字符集打开文件。

 

  说明:

  从上述的运转结果能够,由于列表lines的每二个要素都对应于文件中的一行,因而打字与印刷出来的始末与公事中完全一致。6

  使用卓殊处理,防止程序出现崩溃现象。当程序发生错误时,假使程序还有代码没运营完,如何安妥处理错误就重视。

  说明:

  第1遍施行,已经存在该公文时,其运营结果如下:

  代码:

  代码:

1 import  json
2 
3 filename = r"text_files\list_numbers.json"
4 with open(filename,'r',encoding="utf-8") as file_object:
5     list_numbers = json.load(file_object)
6 print(list_numbers)

  第壹行,我们开拓文件时,钦定了实参’a’,以便将内容扩张到文件中,而不是覆盖文件原内容。

1.1.2 文件路劲

  第2~4行,属于try代码块,当中以读形式,用utf-8打开文件,并将内容读取后赋值给变量contents。

  以上代码没有终点输出,不过要是大家开辟文件test_file4.txt时,将会看出里边有我们写入的诗文:西边日出西部雨,道是无晴却有晴。

运营结果:

1 import json
2 
3 filename = r"text_files\account.json"
4 
5 with open(filename,'r',encoding="utf-8") as file_object:
6     username = json.load(file_object)
7     print("Welcome back,",username,"!")

  第④行,打字与印刷该列表,便于与公事list_number.json对比。

 

1 The file text_files\alice.txt has about 28753 words .
2 The file text_files\little_warrior.txt has about 120399 words .
3 The file text_files\moby_dick.txt has about 214408 words .
4 Sorry,the file text_files\test_file.txt does not exist.
5 The file text_files\siddhartha.txt has about 37428 words .

4.2 保存和读取用户生成的多寡

  当我们运用文件时,一种最广泛的尤其问题便是找不到文件,为了幸免出现分外,大家可以利用try-except代码块进行拍卖。

4.2.2 读取用户生成的数量

  由于Python的错误处理结构得以让我们能够细致的主宰与用户享受错误消息的档次,因而,大家必要在或然出现分外的地点采用try-except代码块来拍卖格外,并依照实际要求控制是还是不是应给用户提醒相应的音信。

  在Python中,重构正是将三个能健康运营的代码作进一步的勘误,即将代码划分为一层层成就具体做事的行数的历程。

  说明:

  对于上述的周转结果,如若大家在出现卓殊时,什么也不做,也不想让用户知道,那么可选取pass语句。

3.  异常

  例如,用户登录时,提示用户在界面输入用户名,然后用json将其保存起来。

  说明:

  例如,大家成立2个文件test_file6.txt,然后将文件中的”莫愁前路无知己,天下什么人人不识君。”修改为:”海内部存款和储蓄器知已,天涯若比邻。”
然后将修改后的内容写入文件test_file6_new.txt。修改前文件的内容如下:

 

  代码:

  在编制程序语言中,1个友好的丰硕处理,能够加强用户体验。当程序出现相当时,大家须要看清是或不是应当告知用户。一般情形下,三个进过详细测试过的一应俱全的次第,很少出现在那之中错误,即由语法或逻辑引发的可怜,但只要程序重视外界因素,如用户输入、存在内定的文本、有网络连接,就能够出现至极。

  第①遍执行,已经存在该文件时,其运维结果如下:

1 with open(r"F:\PyProject\s14\text_files\test_file",'r',encoding="utf-8") as file_object:
2     print(file_object.read())

  第一行,用关键字with
即函数open(),以读的不二法门用utf-8打开文件test_file2.txt。

1.1.4 将文件内容存入一个列表

  第7~11行,属于else代码块,个中第七行使用格局split()对变量contents举行处理,生成叁个列表,兵赋值给变量words;第⑩行使用len()求生成的列表的长短,就足以精晓原字符串中大概包含多少个单词。

1 Please enter your username:YunQtian
2 Welcome to  YunQtian !

  说明:

  说明:

  从上述运维结果可见,test_file.txt文件不存在时,也不会潜移默化展现期后边的代码的运维,也不会出现完整的traceback,那样防止了用户看到。

  代码:

  那么怎么才能使打印的内容跟原著保持一致呢?大家得以选拔rstrip()函数化解多余的空白。

  代码:

  用函数json.load()从.json文件中读取数据到内部存款和储蓄器中。

 1 filename = r"text_files\alice.txt"
 2 try:
 3     with open(filename,'r',encoding="utf-8") as file_object:
 4         contents = file_object.read()
 5 except FileNotFoundError:
 6     print("Sorry, the file ",filename,"does not exist.")
 7 else:
 8     #计算文本大致包含多少个单词
 9     words = contents.split()
10     num_words = len(words)
11     print("The file ",filename,"has about ",str(num_words),"words.")
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

  当我们将文件读到内存后,就能够以别的格局采用那几个数量了。

  第贰行,使用readlines()方法从文件中读取每一行内容,并将其储存在3个列表中,并赋值给变量lines。

1 The file  text_files\alice.txt has about  28753

4.3.1  重构的定义

 

  代码:

  运营结果:

  从以上的周转结果可见,当大家输入的第一个数为0时,程序就崩溃,不能够持续运营。为此,我们引入了else
代码块。

4 存储数据

3.5.2 多文本文件分析

  代码:

  第二5行,调用函数count_words(),并将每一遍循环的结果传递给该函数。

 

 1 import json
 2 
 3 def get_stored_username():
 4     """如果存储了用户,就获取它"""
 5     filename = r"text_files\account.json"
 6     try:
 7         with open(filename,'r',encoding="utf-8") as file_object:
 8             username = json.load(file_object)
 9     except FileNotFoundError:
10         return None
11     else:
12         return username
13 
14 def greet_user():
15     """问候用户,并指出其名字"""
16     username = get_stored_username()
17     if username:
18         print("Welcome back",username,"!")
19     else:
20         username = input("Please enter your username:")
21         filename = r"text_files\account.json"
22         with open(filename,'w',encoding="utf-8") as file_object:
23             json.dump(username,file_object)
24             print("Welcome to",username,"!")
25 
26 greet_user()

 

  因而,想要编写出清晰而易于维护和扩展的代码,那种分割工作必不可少,即重构在编制程序中很重大。

  text_files\test_file.txt  

  从上述的周转结果可见,当文件test_file.txt没有找到时,什么也没做,也不出口任何提示,程序也能持续运营。

1 with open(r"text_files\test_file3","r",encoding="utf-8") as file_object:
2     lines = file_object.readlines()
3 file_string = ''
4 for line in lines:
5     file_string += line.strip()
6 print(file_string)
7 print(len(file_string))

  在Python中,当我们将项目 .txt
的简便的文书名传递给函数open()时,Python会先到眼下实行的先后所在的目录中追寻该公文。但有时候大家为了方便管理文件,会将文件存于单独的目录下。

  代码:

 

1 Please enter your username:YunQtian
2 Welcome to  YunQtian !

  第壹行,大家创造了2个变量,发轫化为空。

  第③遍实践,假若小编呢间不设有,运营结果如下:

  第5~6行,属于except 代码块,处理分外FileNotFoundError,并打字与印刷提醒。

  (3)a:附加情势。在原著后扩充内容,不会删除原有文件的内容。

 

 

4.3.2 重构的效率

  第8~10行,属于try代码块,若是文件存在,则从文件读取用户名。

1 filename = r"text_files\test_file4"
2 with open(filename,'a',encoding="utf-8") as file_object:
3     file_object.write("\n-----追加以下诗句--------------")
4     file_object.write("\n金风玉露一相逢,便胜却人间无数。")
 1    当你老了
 2   叶芝(爱尔兰)
 3 
 4 当你老了,头白了,睡思昏沉,
 5 炉火旁打盹,请取下这部诗歌,
 6 慢慢读,回想你过去眼神的柔和,
 7 回想它们昔日浓重的阴影;
 8 多少人爱你青春欢畅的时辰,
 9 爱慕你的美丽,假意或者真心,
10 只有一个人爱你那朝圣者的灵魂,
11 爱你衰老了的脸上痛苦的皱纹;
12 垂下头来,在红光闪耀的炉子旁,
13 凄然地轻轻诉说那爱情的消逝,
14 在头顶的山上它缓缓踱着步子,
15 在一群星星中间隐藏着脸庞。

 

  例如,在test_file4.txt文件中追加内容:金风玉露一相逢,便胜却人间无数。

  由于打字与印刷的列表内容和存款和储蓄到文件list_numbers.json中的内容都平等,表达数据存款和储蓄成功。

  在Python中,假设我们想要往文件中扩展内容,但不覆盖文件中已部分内容时,那么可以动用附加形式(a)打开文件。**

1.1.1 读取全方位文件

1 The file  text_files\alice.txt has about  28753 words .
2 The file  text_files\little_warrior.txt has about  120399 words .
3 The file  text_files\moby_dick.txt has about  214408 words .
4 The file  text_files\siddhartha.txt has about  37428 words . 

  重构能够让代码尤其明显、更易驾驭、更易增添。

 

  在Python中,对于用户生成的多少,大家可利用json保存,因为假诺不以某种格局来储存那一个多少,待程序运转结束后这一个音讯就会丢掉。

  第③4行,用for语句循环列表中的文件名称。

1 Welcome back, YunQtian !

  很多情景下,大家渴求用户输入某种音讯,并且在程序运维截至时都需保持那一个音信。那么用哪些方法来保证这么些消息呢?

 

 1 filename = r"text_files\test_file6"
 2 filename_new = r"text_files\test_file6_new"
 3 find_str = "莫愁前路无知己,天下谁人不识君。"
 4 replcae_str = "海内存知已,天涯若比邻。"
 5 with open(filename,'r',encoding="utf-8") as file_object:
 6    with open(filename_new, 'w', encoding="utf-8") as file_object_new:
 7        for line in file_object:
 8            if find_str in line:
 9                line = line.replace(find_str,replcae_str)
10            file_object_new.write(line)

  例如,大家将1.4.2.2中的代码进行重构,由于该代码的关键是致敬用户,故将富有代码放到二个greet_user()的函数中。

 

  运营结果:

  第3~4行,我们写入了两行内容,他们将被追加到文件test_file4.txt的末尾。

  代码:

 

  说明:

  运维结果:

 

  代码:

  代码:

  此时,大家会想到一种简易的蕴藏数据的简短的措施,即模块JSON(JavaScript
Object
Notation)。它可让大家大约的将Python数据结构转储到文件中,并在程序再度运转时加载该公文中的数据。

    从以上的运维结果可见,其结果跟1.3.4.第11中学的一致。那阐明完成单个文件分析时有三种达成方式。

  

  以上运维结果跟在此以前的完毕格局呈现的结果完全一致,可是提出接纳第1种艺术读取文件。因为第③种格局,大家即使打开文件,并在必要的时候使用它,Python自会在安妥的时候自动关闭打开的文书。

  第1行,导入json模块。

  在Python中,当大家以为大概会发生错误时,可编写制定贰个try-except代码块来处理或许引发的13分。

  例如,用try-except代码块处理上述代码。

  运维结果:

  代码:

文本及极度

 

  保存数据的最简便的不二法门之一正是讲其写入到文件中。通过将出口的内容写入文件,固然关闭程序输出的终极窗口,这个输出的剧情也仍然留存。这样,大家照样还足以行使输出的内容。

  代码:

 

东风不与周郎便,铜雀春深销二乔。
海内存知已,天涯若比邻。
 1         念奴娇·赤壁怀古
 2         宋代:苏轼
 3 
 4 大江东去,浪淘尽,千古风流人物。
 5 故垒西边,人道是,三国周郎赤壁。
 6 乱石穿空,惊涛拍岸,卷起千堆雪。
 7 江山如画,一时多少豪杰。
 8 遥想公瑾当年,小乔初嫁了,雄姿英发。
 9 羽扇纶巾,谈笑间,樯橹灰飞烟灭。
10 故国神游,多情应笑我,早生华发。
11 人生如梦,一尊还酹江月。

 

3.3  使用拾叁分的益处

4.1 模块JSON的应用

 

1 filename = r"text_files\test_file4"
2 with open(filename,'w',encoding="utf-8") as file_object:
3     file_object.write("东边日出西边雨,道是无晴却有晴。")

 

  运维结果:

  例如,大家先将单文本文件分析的代码修改用count_words()来实现。

  代码:

  第贰行,调用open()方法提供了七个实参,第二个实参是要开辟的公文的名目;第贰个实参是(‘w’)告诉Python解释器,要以写入格局打开这些文件;第⑦个实参告诉Python解释器,使用字符集utf-8。

  

1 《相思》(唐代:王维)红豆生南国,春来发几枝。愿君多采撷,此物最相思。
2 35

  从写入文件的始末可见,调用write()方法往文件中写内容时,假若不加换行符,写入的剧情会挤在一齐。除了接纳换行符,还足以行使空格、制表符及空行等来安装输出的格式。

  代码:

1 请任意输入第一个数字:18
2 请任意输入第二个数字:7
3 第一个数字除以第二数字等于: 2.5714285714285716
4 请任意输入第一个数字:23
5 请任意输入第二个数字:0
6 除数不能为0,请重新输入!
7 请任意输入第一个数字:q

  借使用文件文件中消息,首先要求将音信读取到内部存款和储蓄器中。因而,大家得以遵照文件大小,选取读取文件的法子。该措施有两种情景,一种是三遍性读取文件的全部内容;一种是逐行读取,即一回读一行。

 

  例如,大家在分析多少个文件时,假设文件找不到时,大家不给用户提示任何音讯,可是大家要求将该公文写入一个记录文件名称的文件,便于对此类文件实行处理。

1.1 从文件中读取数据

 

 1 满江红·怒发冲冠
 2 年代: 宋 作者: 岳飞
 3 
 4 怒发冲冠,凭栏处潇潇雨歇。
 5 抬望眼,仰天长啸,壮怀激烈。
 6 三十功名尘与土,
 7 八千里路云和月。
 8 莫等闲白了少年头,空悲切。
 9 
10 靖康耻,犹未雪;
11 臣子恨,何时灭!
12 驾长车踏破贺兰山缺。
13 壮志饥餐胡虏肉,
14 笑谈渴饮匈奴血。
15 待从头收拾旧山河,朝天阙。

  从以上运维结果可见,在traceback中,第④行提出的错误ZeroDivisionError是三个非常对象。Python无法依照大家的渴求处理时,就会创造那种对象。在那种情景下,Python将终止运行程序,并建议引发了哪个种类尤其,而我们可根据那一个音讯对先后开始展览改动。

 1 import json
 2 
 3 def get_stored_username():
 4     """如果存储了用户,就获取它"""
 5     filename = r"text_files\account.json"
 6     try:
 7         with open(filename,'r',encoding="utf-8") as file_object:
 8             username = json.load(file_object)
 9     except FileNotFoundError:
10         return None
11     else:
12         return username
13 
14 def get_new_username():
15     """提示用户输入用户名"""
16     username = input("Please enter your usernamr:")
17     filename = r"text_files\account.json"
18     with open(filename,'w',encoding="utf-8") as file_object:
19         json.dump(username,file_object)
20     return username
21 
22 def greet_user():
23     """问候用户,并指出其用户名"""
24     username = get_stored_username()
25     if username:
26         print("Welcome back",username,"!")
27     else:
28         username = get_new_username()
29         print("Welcome to ",username,"!")
30 
31 greet_user()

  运营结果:

1 with open(r"text_files\test_file",'r',encoding="utf-8") as file_object:
2     print(file_object.read())

3.6  怎么样处理相当

  例如,将文件list_numbers.json中内容读取出来,并打字与印刷。

   当你老了
  叶芝(爱尔兰)

当你老了,头白了,睡思昏沉,
炉火旁打盹,请取下这部诗歌,
慢慢读,回想你过去眼神的柔和,
回想它们昔日浓重的阴影;
多少人爱你青春欢畅的时辰,
爱慕你的美丽,假意或者真心,
只有一个人爱你那朝圣者的灵魂,
爱你衰老了的脸上痛苦的皱纹;
垂下头来,在红光闪耀的炉子旁,
凄然地轻轻诉说那爱情的消逝,
在头顶的山上它缓缓踱着步子,
在一群星星中间隐藏着脸庞。


代码:

1 with open(r"text_files\test_file1",'r',encoding="utf-8") as  file_object:
2     for line in file_object:
3         print(line)

  执行代码后,文件内容如下所示:

  在Python中,有时我们供给检查文件中是或不是含有我们关切的新闻,可能需求修改的新闻,此时,可使用for循环来逐行读取文件。

  许多景观下,大家的新闻是储存在文件中的。例如对用户作为的辨析,用户访问系统可能网站的访问音信会被积存于文本中,然后对文本内容举行解析,分析用户作为,找出个中有价值的音信。

  第9行,用函数len()求出字符串的长短,并打字与印刷出来。

  第叁4行,调用代码中注明的函数count_words(),并给其传递三个实参。

  第叁行,使用一切文件读取的不二法门read()读完全部文件内容。

1.2 写入文件

  我们得以分析包蕴整本书的公文文件,计算其包括多少单词。此时,我们得以行使办法split(),它根据2个字符串创建八个单词列表。

  代码:

1.2.2  写入多行内容

  说明:

  代码:

  (1)r:读取情势。只可以读取打开的文件内容。

  运营结果:

 

 1 世界上最遥远的距离——[印度]泰戈尔
 2 
 3 世界上最遥远的距离 不是生与死
 4 而是我就站在你面前你却不知道我爱你
 5 
 6 世界上最遥远的距离
 7 不是我就站在你面前你却不知道我爱你
 8 而是明明知道彼此相爱却不能在一起
 9 
10 世界上最遥远的距离
11 不是明明知道彼此相爱却不能在一起
12 而是明明无法抵挡这股想念却还是故意装作丝毫没有把你放在心里
13 
14 世界上最遥远的距离
15 不是明明无法抵挡这股想念却还是故意装作丝毫没有把你放在心里
16 而是用自己冷漠的心对爱你的人掘了一条无法跨越的沟渠
1 file = open("test_file1",'r',encoding="utf-8")
2 print(file.read())
3 file.close()
 1           将进酒
 2          作者:李白
 3 
 4 君不见,黄河之水天上来,奔流到海不复回。
 5 君不见,高堂明镜悲白发,朝如青丝暮成雪。
 6 人生得意须尽欢,莫使金樽空对月。
 7 天生我材必有用,千金散尽还复来。
 8 烹羊宰牛且为乐,会须一饮三百杯。
 9 岑夫子,丹丘生,将进酒,杯莫停。
10 与君歌一曲,请君为我倾耳听。
11 钟鼓馔玉不足贵,但愿长醉不复醒。
12 古来圣贤皆寂寞,惟有饮者留其名。
13 陈王昔时宴平乐,斗酒十千恣欢谑。
14 主人何为言少钱,径须沽取对君酌。
15 五花马,千金裘,呼儿将出换美酒,
16 与尔同销万古愁。

  例如,将以上多个代码合并为三个,并搞好充足处理。

4.3  重构

  从以上运维结果看,其结果跟使用pass语句时一致,但是,程序目录中多了三个file_missing.txt文件,并且在那之中的始末如下:

  文件文件的解析包罗分析单个文本和四个文件。

因此,函数greet_user()首先调用函数get_stored_username(),若赢获得再次回到的用户名,则打字与印刷问候老用户的问候语,反之,再调用函数get_new_username(),提醒用户输入其用户名,并将其存入打开的文件中,再打字与印刷一条欢迎新用户的问候语。

Welcome back, YunQtian !

1.2.4  文件内容的修改

  优化后代码:

  执行完以上代码后,会自动生成3个文件test_file5.txt,个中写入的具体内容如下所示:

  例如,用try-except处理1.3.1 中的代码爆发的百般。

  代码1:

  第11~15行,属于except代码块,假如文件不存在,则提醒用户输入其用户名,并以读形式和utf-8打开文件,再调用函数json.load()将输入的有用户名存款和储蓄到json文件中,并打字与印刷欢迎的问讯。

1 Traceback (most recent call last):
2   File "F:/PyProject/s14/day3/test_except.py", line 4, in <module>
3     with open(filename,'r',encoding="utf-8") as file_object:
4 FileNotFoundError: [Errno 2] No such file or directory: 'test_file'

  运转结果:

  例如,分别以相对路径和相对路劲的章程打开相应路径下的公文。

 1 import  json
 2 def greet_user():
 3     """问候用户,并指出其名字"""
 4     filename = r"text_files\account.json"
 5     try:
 6         with open(filename,'r',encoding="utf-8") as file_object:
 7             username = json.load(file_object)
 8     except FileNotFoundError:
 9         username = input("Please enter your username:")
10         with open(filename,'w',encoding="utf-8") as file_object:
11             json.dump(username,file_object)
12             print("Welcome to",username,"!")
13     else:
14         print("Welcom back ,",username,"!")
15 
16 greet_user()

  在上述重构的代码中,大家还可将函数greet_user()中的另三个代码提取出来,即将没有存储用户名时提示用户输入的代码放到二个独门的函数中。

  第3~5行,代码注释,即程序描述。

  第3~12行,定义了二个收获已存在的用户的用户名的函数get_stored_username(),找到就重回该用户名,反之重回None。

东边日出西边雨,道是无晴却有晴。

  当我们将错误的代码print(z)放到了二个try代码中,倘诺try代码中的代码运行没格外,则Python将跳过except代码块;反之,则执行except中的代码块。

1 You can't divide by zero!

  第16~17行,属于else代码块,打字与印刷欢迎回来的问候。

 

  要读取整个文件,供给叁个富含几行内容的公文文件。

 

1 The file  text_files\alice.txt has about  28753 words .
2 The file  text_files\little_warrior.txt has about  120399 words .
3 The file  text_files\moby_dick.txt has about  214408 words .
4 The file  text_files\siddhartha.txt has about  37428 words .

 

  第贰行,使用函数rstrip()来扫除多余的空白行。

  文本内容如下所示:

  从上述的运营结果能够,每行打印后都会追加贰个空白行,故与原著格式不完全一致。那是因为在那个文件中,每行的最终都有3个看不见的换行符,而print语句也会助长1个换行符,因而,每行末尾都有四个换行符:多少个源点文件自身,另一个来源print语句。

  从上述那几个最终重构的代码可见,各类函数都进行单一而显明的天职。大家调用函数greet_user()打字与印刷一条恰到好处的问候语,即要么问候老用户,要么欢迎新用户。

 

 

1.2.1 写入空文件

 

  第一行,用def 申爱他美(Aptamil)(Karicare)个函数count_words()。

  当自家动用方式write()往文件中写入内容时,写入的文本的末段不会活动添加换行符,因而,要是我们要往文件中写入多行内容时,要求在write()语句中机动写上换行符。

  代码:

 

东风不与周郎便,铜雀春深销二乔。
莫愁前路无知己,天下谁人不识君。

  说明:

 1 while True:
 2     first_number = input("请任意输入第一个数字:")
 3     if first_number == "q":
 4         break
 5     second_number = input("请任意输入第二个数字:")
 6     if second_number == "q":
 7         break
 8     try:
 9         answer = int(first_number) / int(second_number)
10     except ZeroDivisionError:
11         print("除数不能为0,请重新输入!")
12     else:
13         print("第一个数字除以第二数字等于:",answer)

  第3~4行,分别提醒用户输入用户名和密码。

 

 

  在富有编制程序语言中,对那多少个的拍卖万分主要。Python程序执行时期爆发错开上下班时间,会经过一种奇特目标来保管程序,那种特有的目的就被誉为非常。每当爆发让Python胸中无数的不当时,它都会创立贰个分外对象。假诺大家编辑了处理该特其他代码,那么程序将会一连运维;反之,程序将适可而止运作,并显示二个traceback,在那之中包括关于极度的告知。

  运行结果:

 

  pass语句充当了占位符,它唤醒大家在先后的某部地点怎么都没做,并且未来或许要在该处做些什么。

  说明:

  代码:

  从上述的周转结果可见,打字与印刷的内容跟文件中的完全一致。

  第⑤行,使用函数json.load()将文件对象中的内容读取到内部存款和储蓄器中,并赋值给变量list_numbers。

  第贰回实践,已经存在该文件时,其运转结果如下:

  代码:

  运营结果:

1 Welcome back, YunQtian !

  保存和读取用户生成的多寡,在那之中可以在叁个先后中贯彻。

 

  第3~12行,定于了1个函数get_stored_username(),并且在文书档案字符串中显著提议了该函数的效益。

 1 def count_words(filename):
 2     '''算一个英文的文本大致包含多少个单词'''
 3     try:
 4         with open(filename,'r',encoding="utf-8") as file_object:
 5             contends = file_object.read()
 6     except FileNotFoundError:
 7         print("Sorry,the file ",filename,"does not exist.")
 8     else:
 9         # 计算英文文件大致包含多少个单词
10         words = contends.split()
11         nume_words = len(words)
12         print("The file ",filename,"has about ",str(nume_words))
13 filename = r"text_files\alice.txt"
14 count_words(filename)

  说明:

  代码:

 

  第2行,开头用for循环遍历列表。

1 Please enter your username: YunQtian
2 Welcome!

  第1行,导入json模块;

  第七行,使用pass语句,什么也不做。

  用函数json.dump()将数据存款和储蓄到.json文件中。

  说明:

 

 

  程序执行截至后,文件account.json中的内容如下所示:

  第八行,使用函数json.dump()将列表的多少存款和储蓄到文件对象中。

  第肆行,打字与印刷该字符串file_string 。

  例如,分析四个英文文本文件。

 

  第8~9行,使用函数json.dump()分别将用户名保存到文件account.json中。

 1         念奴娇·赤壁怀古
 2         宋代:苏轼
 3 
 4 大江东去,浪淘尽,千古风流人物。
 5 故垒西边,人道是,三国周郎赤壁。
 6 乱石穿空,惊涛拍岸,卷起千堆雪。
 7 江山如画,一时多少豪杰。
 8 遥想公瑾当年,小乔初嫁了,雄姿英发。
 9 羽扇纶巾,谈笑间,樯橹灰飞烟灭。
10 故国神游,多情应笑我,早生华发。
11 人生如梦,一尊还酹江月。

  第拾行,将出现很是,找不到的文件名称写入文件file_missing.txt中。

东边日出西边雨,道是无晴却有晴。

-----追加以下诗句--------------
金风玉露一相逢,便胜却人间无数。

   在Python中,若是大家想修改文件中的某一情节,能够应用函数replace()替换须要修改的文本内容。

  (4)r+:读写形式。对打开的文本既可读取,又可写入。

1 filename = r"text_files\test_file5"
2 with open(filename,'w',encoding="utf-8") as file_object:
3     file_object.write("\t\t宿严陵钓台\n")
4     file_object.write("\t作者:神颖 朝代:唐代\n")
5     file_object.write("寒谷荒台七里洲,")
6     file_object.write("贤人永逐水东流。\n")
7     file_object.write("独猿叫断青天月,")
8     file_object.write("千古冥冥潭树秋。\n")
 1 def count_words(filename):
 2     """计算一个英文的文本大致包含多少个单词"""
 3     try:
 4         with open(filename, 'r', encoding="utf-8") as file_object:
 5             contends = file_object.read()
 6     except FileNotFoundError:
 7         print("Sorry,the file ", filename, "does not exist.")
 8     else:
 9         # 计算英文文件大致包含多少个单词
10         words = contends.split()
11         nume_words = len(words)
12         print("The file ", filename, "has about ", str(nume_words))
13 filenames = [r'text_files\alice.txt',r'text_files\little_warrior.txt',r'text_files\moby_dick.txt',r'text_files\test_file.txt',r"text_files\siddhartha.txt"] 
14 for filename in filenames: 15 count_words(filename)

  我们都知道,算术运算中,除数无法为0。当大家用八个数字除以0时,往往会提醒除数无法为0。

 

1.1.3  逐行读取文件

  由此,使用try-except代码块处理很是的益处是:防止用户观看traceback;让程序能够再而三未来实施。

  第14~20行,定义了1个提示新用户输入用户名的函数get_new_username(),并应用json.dump()函数将其存入文件中,并重回该用户名。

  从上述运营结果能够,使用特别处理后,当输入的第四个数为0时,程序还能接二连三运维,除非输入q时退出程序。

  代码:

  例如,将文件中的一首诗读取到内部存款和储蓄器中,然后选用它,答应全体剧情,并求其长度。文件内容如下:

  运营结果:

  说明:

  文件路劲有二种:一种是纯属路劲;一种是相对路劲。假设大家须求开辟的公文所在的公文夹与履行顺序位于同一目录下,那么可以应用相对路劲即可;假设我们必要开辟的文本所在的文本夹位于执行顺序目录之外的地方,那么只好使用相对化路劲。

  第三次实践,如若作者呢间不存在,运营结果如下:

  运转结果:

 

  例如,分析文本文件alice.txt中有稍许个单词。

  例如,将数字0到9存到1个列表中,然后接纳函数json.dump()来储存该数字列表。

    

 

  说明:

  运营结果:

 1 def count_words(filename):
 2     """计算一个英文的文本大致包含多少个单词"""
 3     try:
 4         with open(filename, 'r', encoding="utf-8") as file_object:
 5             contends = file_object.read()
 6     except FileNotFoundError:
 7         pass
 8     else:
 9         # 计算英文文件大致包含多少个单词
10         words = contends.split()
11         nume_words = len(words)
12         print("The file ", filename, "has about ", str(nume_words),"words .")
13 filenames = [r'text_files\alice.txt',r'text_files\little_warrior.txt',r'text_files\moby_dick.txt',r'text_files\test_file.txt',r'text_files\siddhartha.txt']
14 for filename in filenames:
15      count_words(filename)

  运营结果即文件list_numbers.json中的内容都如下所示:

 1    当你老了
 2 
 3   叶芝(爱尔兰)
 4 
 5 
 6 
 7 当你老了,头白了,睡思昏沉,
 8 
 9 炉火旁打盹,请取下这部诗歌,
10 
11 慢慢读,回想你过去眼神的柔和,
12 
13 回想它们昔日浓重的阴影;
14 
15 多少人爱你青春欢畅的时辰,
16 
17 爱慕你的美丽,假意或者真心,
18 
19 只有一个人爱你那朝圣者的灵魂,
20 
21 爱你衰老了的脸上痛苦的皱纹;
22 
23 垂下头来,在红光闪耀的炉子旁,
24 
25 凄然地轻轻诉说那爱情的消逝,
26 
27 在头顶的山上它缓缓踱着步子,
28 
29 在一群星星中间隐藏着脸庞。

3.5 文本文件分析

  那么大家想完结分析八个文本时,该如何是好呢?

相关文章

网站地图xml地图