在python中打开和读取文件有什么区别?

时间:2013-12-01 05:21:03

标签: python

在python的OS模块中,有一种打开文件的方法和一种读取文件的方法。

open方法的docs说:

  

打开文件文件并根据标志和设置各种标志   可能是模式的模式。默认模式为0777(八进制),   并且首先屏蔽当前的umask值。返回文件   新打开文件的描述符。

read方法的文档说;

  

从文件描述符fd读取最多n个字节。返回一个字符串   包含读取的字节。如果文件的末尾是由fd引用的   已到达,返回一个空字符串。

我理解从文件读取n个字节意味着什么。但这与开放有何不同?

4 个答案:

答案 0 :(得分:5)

“打开”文件实际上并不会将文件中的任何数据带入您的程序。它只是准备文件进行读取(或写入),因此当您的程序准备好读取文件的内容时,它可以立即执行。

答案 1 :(得分:1)

打开一个文件允许你读取或写入它(取决于你作为第二个参数传递的标志),而读取它实际上是从一个数据中提取数据文件,通常保存在变量中进行处理或打印为输出。

打开文件后,您并不总是从文件中读取文件。打开还允许您通过覆盖所有内容或附加到内容来写入文件。

从文件中读取:

>>> myfile = open('foo.txt', 'r')
>>> myfile.read()

首先打开具有读取权限的文件(r) 然后从文件

read()

要写入文件:

>>> myfile = open('foo.txt', 'r')
>>> myfile.write('I am writing to foo.txt')

在这些示例的第1行中唯一要做的就是打开文件。直到我们实际read()从文件中发现任何内容都发生了变化

答案 2 :(得分:0)

open为您提供fd(文件描述符),您可以稍后从该fd read获取。

也可以open文件用于其他目的,比如写入文件。

答案 3 :(得分:0)

在我看来,您可以在不调用read方法的情况下从文件句柄中读取行,但我猜read()确实将数据放在变量位置。在我的课程中,我们似乎是在不使用read()的情况下打印行,计算行和从行添加数字。

然而,需要使用rstrip()方法,因为使用for in语句从文件句柄中打印行也会在行的末尾打印不可见的换行符号,print语句也是如此。

来自Charles Severance的Python for Everybody,这是入门代码。

  """
7.2
Write a program that prompts for a file name,
then opens that file and reads through the file,
looking for lines of the form:
X-DSPAM-Confidence:    0.8475
Count these lines and extract the floating point
values from each of the lines and compute the
average of those values and produce an output as
shown below. Do not use the sum() function or a
variable named sum in your solution.
You can download the sample data at
http://www.py4e.com/code3/mbox-short.txt when you
are testing below enter mbox-short.txt as the file name.
"""


# Use the file name mbox-short.txt as the file name

fname = input("Enter file name: ") 
fh = open(fname) 
for line in fh:
    if not line.startswith("X-DSPAM-Confidence:") : 
        continue
    print(line)
print("Done")