python 文件操作 11

一.文件读取操作

1. 读取整个文件

  在同级目录,创建一个pi_digits.txt文件和file_reader.py文件。

  pi_digits.txt文件中加入内容

  file_reader.py文件内容如下:

with open('pi_digits.txt') as file_object:
    contents=file_object.read()
print(contents)

 

  open()函数打开文件,接收一个参数:要打开的文件的名称,当前运行的是file_reader.py,因此python在file_reader.py所在的目录中查找pi_digits.txt。open()函数返回一个表示文件的对象赋值给file_object。

   with关键字是指:不需需要访问文件后将其关闭。不推荐调用close来关闭文件,因为如果程序存在bug导致方法导致close()未执行,文件将不会关闭,导致数据丢失或受损。

  read()方法读取这个文件的全部内容,并将其作为一个长字符串赋值给变量contents。

 

2. 文件路径 

  上面是同级目录读取文件,如果不在同级目录,那么需要指定相对路径或绝对路径。在python程序中,路径使用斜杠( / )

  当file_reader.py文件与files文件同级时,运行ile_reader.py,读取代码如下

with open('files/pi_digits.txt') as file_object:
    contents=file_object.read()
print(contents)

 

3.逐行读取

  读取文件时,常需要检查其中的每一行 ,可对文件对象使用for循环

with open('files/pi_digits.txt') as file_object:
    for line in file_object:
        print(line)

 

  为什么会出现空白行呢? 因为在这个文件中,每行的末尾都有一个看不见的换行符,而函数调用print()也会加上一个换行符,因此每行末尾都有两个换行符。

  可加上rstrip()去掉空白行

with open('files/pi_digits.txt') as file_object:
    for line in file_object:
        print(line.rstrip())

 

4.读取所有内容到变量中,退出with后在做逻辑

with open('files/pi_digits.txt') as file_object:
    lines=file_object.readlines()

for line in lines:
    print(line.rstrip())

  注意:读取文本文件时,Python将其中的所有文本都解读为字符串。如果读取的是数,并要将其作为数值使用,就必须使用函数int()将其转换为整数或使用函数float()将其转换为浮点数。

 

二.文件写入操作

1.创建文件并写入

filename='files/programming.txt'
with open(filename,'w') as file_object:
    file_object.write('python')

  调用open时提供了两个参数,第二个参数 w  是写入模式,如果省略了第二个参数,默认就是只读模式 r。

  r   读取模式

  w  写入模式 (不存在时,自动创建文件)

  a  追加模式(打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。)

  r+  读写模式

   注意: 使用 w 写入模式时一定要小心,如果文件已存在,将会清空文件原有内容。

  write写入,是不换行的。都挤在第一行。如果要换行,可以加\n

filename='files/programming.txt'
with open(filename,'w') as file_object:
    file_object.write('python\n')
    file_object.write('asp.net core\n')

 

2.追加内容到文件

filename='files/programming.txt'
with open(filename,'a') as file_object:
    file_object.write('java\n')
    file_object.write('php\n')

  使用a 追加模式,将内容添加到文件末尾,如果文件不存在,将自动创建一个文件。

 

 三. 删除文件指定的行

  当文件不大时,这里的一个方案是:先把原有文件数据写入到集合中, 在集合中删除指定的行后,再写入另一个临时文件,将原有文件删除,再将临时文件重命名为原有文件名,代码哪下:

    #删除行并保存
    def remove_and_save(self):
        filename='ebs_crawler/files/abc_brand_generate_url_temp.txt'
        oldfilename='ebs_crawler/files/abc_brand_generate_url.txt'   #原有文件
        urls=self.urls  #原有文件数据写入到集合中
        if len(urls) % 10==0:   #当集合总数减少时
            with open(filename,'w',encoding='UTF-8-sig') as file_object:
                for url in  urls:
                    file_object.write(url+'\n') 
            os.remove(oldfilename)
            os.rename(filename,oldfilename)
            self.logger.info(f"删除并保存共url:{len(urls)}个")

 

 

 

 

  

posted on 2022-12-26 12:26  花阴偷移  阅读(52)  评论(0编辑  收藏  举报

导航