码迷,mamicode.com
首页 > 编程语言 > 详细

三、python之文件的处理

时间:2019-10-20 21:41:52      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:nbsp   lock   inux   两种方法   错误   异常   dem   输出   指定   

1、文件的读取

1.1 读取整个文件

  假设我们有一个叫做“hello.txt”的文件,文件内容如下:

helloWorld
helloPython
helloJava

  在该文件中,有三行字符串,接下来,我们就可以来读取打印它,代码如下:

 1 #方法一
 2 file_hello = open(hello.txt)
 3 content = file_hello.read()
 4 print(content)
 5 file_hello.close()
 6 
 7 #方法二
 8 with open(hello.txt) as file_hello:
 9    contents = file_hello.read()
10    print(contents)

运行后得到结果:

1 helloWorld
2 helloPython
3 helloJava
4 

  在读取一个文件的时候,我们首先需要去打开这个文件。在这里,可以调用open()这个方法来打开这个文件,open()方法会返回一个“hello.txt”文件的对象,并将这个对象存储在file_hello这个变量中。

  在有了文件的对象后,可以使用方法read()来读取这个文件的全部内容,并将读取到的文件存储在contents变量中,然后直接打印contents就可以了

  方法一和方法二的区别:在上面的代码中,我们可以看到最终的输出结果都是一样的,但是在方法一的最后,我们还执行了一段file_hello.close()代码。在我们打开文件,使用结束之后,我们必须对文件进行关闭,否则会占用资源,而且文件也会因为某些bug或代码的处理过冲中出现损坏的情况。在方法二中,我们在输出结果之后,并没有去执行关闭文件的操作,是因为我们使用了with语句,python中的with语句适用于对资源进行整合的场景,在不需要访问文件后,会自动将其关闭。保证不管在处理文件的过程中是否发生错误或者异常,在最终程序都会关闭文件,释放资源。

 

  在上述的输出结果中,我们发现在最后多了一个空行,这是因为read()方法在到达文件的末尾时会返回一个空字符串。如果不希望打印这个空行,我们可以使用rstrip():

1 with open(hello.txt) as file_hello:
2    contents = file_hello.read()
3    print(contents.rstrip())

运行后得到结果:

1 helloWorld
2 helloPython
3 helloJava

 

1.2 逐行读取

  我们可以使用for循环来遍历读取文件中每一行的数据

 1 #方法一:
 2 file_path = txt_file/hello.txt
 3 with open(file_path) as file_hello:
 4    for line in file_hello:
 5       print(line)
 6       
 7 #方法二:
 8 file_path = txt_file/hello.txt
 9 with open(file_path) as file_hello:
10    lines = file_hello.readlines()
11    print(lines)
12 for line in lines:
13    print(line)

运行后得到结果:

 1 方法一:
 2 helloWorld
 3 
 4 helloPython
 5 
 6 helloJava
 7 
 8 方法二:
 9 [helloWorld\n, helloPython\n, helloJava\n]
10  helloWorld
11 
12 helloPython
13 
14 helloJava
15 

  以上我们使用了两种方法来进行逐行读取。方法一,我们直接通过for循环来遍历file_hello变量,这种方法有一个缺点,那就是只能在with代码块内可用,所以我们如果想要脱离with代码块去进行逐行读取,就可以采用第二种方法。在方法二中,我们使用readlines()这个方法,readlines()方法从文件中读取每一行,并将其存储在一个列表中,然后我们使用lines然后存储这个列表就可以了,在以后的读取中,就可以直接脱离with代码块,直接对lines进行遍历。

2、文件路径的读取

  如果我们的hello.txt文件存在于一个叫做txt_file的文件夹中,我们可以使用相对路径来打开文件

1 with open(txt_file/hello.txt) as file_hello:

  以上为OS X和Linux的打开方式,如果是windows下,需要使用“\”来指定路径

我们也可以使用绝对路径来读取文件,当相对路径找不到文件时,就可以使用绝对路径

1 file_path = /Users/yezhenxiang/PycharmProjects/Test/txt_file/hello.txt
2 with open(file_path) as file_hello:

 

2、文件的写入

1、文件的单行写入

  我们仍然使用“hello.txt”文件,文件中的内容保持不变。现在,我们在文件中写入“hello demo”,代码如下:

1 file_path = txt_file/hello.txt
2 with open(file_path, w) as file_hello:
3    file_hello.write(hello demo)

  然后我们打开文件会发现文件中的内容变了

1 hello demo

  上述的代码中我们仍然使用open()函数来实现,但是在函数内变成了两个实参,第一个是要打开的文件,第二个‘w‘表示要以写入的模式打开文件

  在使用w写入文件时,要注意的是在python会在返回文件对象前清空该文件,所以在执行完with open(file_path, ‘w‘) as file_hello时,文件中的内容将会被清空。

2、以附加的方式写入文件

  写入文件时,在不同的场景下,我们可能希望代码不去清空文件中原来的内容,而是在原来文件的基础上附加去写入。这个时候,我们可以使用附加模式打开文件,代码如下:

1 file_path = txt_file/hello.txt
2 with open(file_path, a) as file_hello:
3    file_hello.write(\nhello python)

  在代码中,我们指定实参‘a‘,以附加的模式去进行文件的写入,这样我们就不会去清空原来文件中的内容

运行后的结果:

hello demo
hello python

 

三、python之文件的处理

标签:nbsp   lock   inux   两种方法   错误   异常   dem   输出   指定   

原文地址:https://www.cnblogs.com/lw-whatever/p/11710009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!