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

Python学习Day8—文件基本操作

时间:2017-12-26 16:10:40      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:绝对路径   ada   python   不用   bytes   call   odi   单位   lan   

打开文件

    #’filename.txt‘处指定文件路径,可以使用绝对路径和相对路径
    #mode=‘w‘指定文件的打开方式
    #encoding=‘utf-8‘指定文件编码
f = open(filename.txt,mode=w,encoding=utf-8)

f.close() #关闭文件,使用上面句柄打开文件后,文件会一直在内存中运行,在对文件进行操作后,应记得关闭文件

---------------------------------------------------------------------------
#使用with关键字+open打开文件后,不用再使用close对文件进行关闭,并且可以同时打开多个文件,打开多个文件需要用逗号隔开,最后的句柄名称后需要加冒号
with open(filename.txt,mode=w,encoding=utf-8) as f:#打开一个文件
with open(filename.txt,mode=w,encoding=utf-8) as f,with open(filename.txt,mode=w,encoding=utf-8) as f1:#打开多个文件

操作文件

1.读

# 此处filename.txt文件中原始内容为:人生苦短,我用python
# ①r——只读,不存在报错
with open(filename.txt, mode=r, encoding=utf-8) as f:
    content = f.read()
    print(content)
>>> 人生苦短,我用python

# ②rb——以bytes类型读
with open(filename.txt, mode=rb) as f:
    content = f.read()
    print(content)
>>> b\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python

# ③r+——读写,不存在不会创建,写会覆盖之前内容
with open(filename.txt, mode=r+,encoding=utf-8) as f:
    content = f.read()
    f.write(\n新添加:Life is short , I use python)
    print(content)
>>> 人生苦短,我用python
# ④target_file.txt中的内容为:
>>> 人生苦短,我用python
>>> 新添加:Life is short , I use python

# ⑤r+b——以bytes类型读写
with open(filename.txt, mode=r+b) as f:
    content = f.read()
    f.write(\n新添加:Life is short , I use python.encode(utf-8))
    print(content)
>>> b\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python
# target_file.txt中的内容为:
>>> 人生苦短,我用python
>>> 新添加:Life is short , I use python

2.写

# 此处filename.txt文件中原始内容为空,需要向其中写入:人生苦短,我用python
# ①w——只写,不存在则创建,存在则清空再写
with open(filename.txt, mode=w, encoding=utf-8) as f:
    content = f.write(人生苦短,我用python)
# target_file.txt中的内容为:
>>> 人生苦短,我用python


# ②x——只写,不存在则创建,存在则报错
with open(filename.txt, mode=x, encoding=utf-8) as f:
    content = f.write(人生苦短,我用python)
# target_file.txt存在:
>>> Traceback (most recent call last):
>>>    File "D:/python_fullstack_s9/day8/practice.py", line 94, in <module>
>>>      with open(target_file.txt, mode=x, encoding=utf-8) as f:
>>>  FileExistsError: [Errno 17] File exists: target_file.txt
# filename.txt不存在:
>>> 人生苦短,我用python

# # ③wb——以bytes类型写
with open(filename.txt, mode=wb) as f:
    content = f.write(人生苦短,我用python.encode(utf-8))
>>> 人生苦短,我用python

# # ④w+——写读,不存在则创建,写会覆盖之前的内容
with open(filename.txt, mode=w+) as f:
    content = f.write(hello,world)
    date = f.read()
    print(date)
>>>
# filename.txt中的内容为:
>>> hello,world

# # ⑤w+b——以bytes类型写读
with open(filename.txt, mode=w+b) as f:
    content = f.write(hello,world.encode(utf-8))
    date = f.read()
    print(date)
>>> b‘‘
# filename.txt中的内容为:
>>> hello,world

3.追加

# 此处filename.txt文件中原始内容为:人生苦短,我用python,需要在后面添加‘谁用谁知道‘内容
# ①a——追加,不存在则创建,存在则追加
with open(filename.txt, mode=a, encoding=utf-8) as f:
    content = f.write(谁用谁知道)
filename.txt中的内容为:
>>> 人生苦短,我用python谁用谁知道

# ②ab——以bytes类型追加
with open(filename.txt, mode=ab) as f:
    content = f.write(谁用谁知道.encode(utf-8))
>>> 人生苦短,我用python谁用谁知道

# ③a+——可读可写,不存在则创建,写则追加
with open(filename.txt, mode=a+,encoding=utf-8) as f:
    content = f.write(谁用谁知道)
    f.seek(0)
    date = f.read()
    print(date)
>>> 人生苦短,我用python谁用谁知道

# ④a+b——以bytes类型可读可写
with open(filename.txt, mode=a+b) as f:
    content = f.write(谁用谁知道.encode(utf-8))
    f.seek(0)
    date = f.read()
    print(date)
>>> b\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python\xe8\xb0\x81\xe7\x94\xa8\xe8\xb0\x81\xe7\x9f\xa5\xe9\x81\x93
# filename.txt中的内容为:
>>> 人生苦短,我用python谁用谁知道

4.其他操作

① seek() 移动光标指针位置

seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

② tell() 返回当前指针所在的位置

tell对于英文字符就是占一个,中文字符占三个,参数表示的是字节数区分与read()的不同.

③ truncate() 截断文件

truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

④ readline() 读取一行

⑤ readlines() 读取多行,返回为列表

⑥ readable() 文件是否可读

⑦ writeline() 写入一行

⑧ writelines() 写入多行

⑨ writable() 文件是否可读

⑩ closed() 文件是否关闭

? encoding=’utf-8’ 如果文件打开模式为b,则没有该属性

? flush() 立刻将文件内容从内存刷到硬盘

? for循环文件句柄

with open(filename.txt, mode=r,encoding=utf-8) as f:
    for i in f:
        print(i)
>>> 人生苦短,我用python
>>> 谁用谁知道

 

Python学习Day8—文件基本操作

标签:绝对路径   ada   python   不用   bytes   call   odi   单位   lan   

原文地址:https://www.cnblogs.com/NeroCl/p/8118155.html

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