文件(file)操作

创建文件

verse.txt:

床前明月光
疑是地上霜

open(path(文件路径),mode(模式:r/r+[读],w/w+[写],a/a+[追加])):返回文件句柄(对象)

verse_file = open('verse.txt','r',encoding="utf-8")

r/r+[读],w/w+[写],a/a+[追加]的区别

mode 可做操作 若文件不存在 是否覆盖
r 只读 报错 -
r+ 读写 报错
w 只写 创建
w+ 读写 创建
a 只写 创建 追加
a+ 读写 创建 追加

readlines():获取所有行,返回list

 verse_file = open('verse.txt','r',encoding="utf-8")
 print(verse_file.readlines())
 verse_file.close()
 #result:
     #['床前明月光\n', '疑是地上霜']

read():读取所有字符,返回string

 verse_file = open('verse.txt','r',encoding="utf-8")
 print(verse_file.read())
 verse_file.close()
 #result:
     # 床前明月光
     # 疑是地上霜

遍历文件最优法(懒加载)

verse_file = open('verse.txt','r',encoding="utf-8")
for row in verse_file:
    print(row.strip())
#result:
    # 床前明月光
    # 疑是地上霜

write():写入.当mode为'w'[写]时,会清空之前的内容再写入;当mode为'a'[追加]时,会在原来基础上继续追加写入

 verse_file = open('verse.txt','w',encoding="utf-8")
 input_str = '举头望明月\n低头思故乡'
 verse_file.write(input_str)
 verse_file.close()
 """
 verse.txt:
     举头望明月
     低头思故乡
 """
 verse_file = open('verse.txt','a',encoding="utf-8")
 input_str = '举头望明月\n低头思故乡'
 verse_file.write(input_str)
 verse_file.close()
 """
 verse.txt:
     床前明月光
     疑是地上霜举头望明月
     低头思故乡
 """

seek(position):定位光标位置

verse_file = open('verse.txt','r',encoding="utf-8")
verse_file.seek(6)#utf-8中一个中文字符占3个字节
print(verse_file.read())
verse_file.close()
"""
 verse.txt:
    明月光
    疑是地上霜
"""

tell():获取光标位置

 verse_file = open('verse.txt','r',encoding="utf-8")
 verse_file.seek(6)
 print(verse_file.tell());#result:6

练习

多级目录文件持久化增删改查

address.dic:

{}

file.py:

 file = open('address.dic', 'r', encoding='utf8')
 history_list = []
 address_dic = eval(file.read())
 while True:
     print('---当前地址---')
     for current in address_dic:
         print(current)
     choose = input('请选择---0:返回上一层,1:新增,2:删除,3:修改,4:查询,5:保存退出:')
     ':
         if history_list:
             address_dic = history_list.pop();
     ':
         insert_name = input('请输入新增项名称:')
         if insert_name in address_dic:
             print('新增失败!该名称项已存在!')
             continue;
         else:
             address_dic[insert_name] = {}
     ':
         delete_name = input('请输入删除项名称:')
         if delete_name not in address_dic:
             print('删除失败!该名称项不存在!')
             continue;
         else:
             del address_dic[delete_name];
     ':
         modify_name = input('请输入修改项名称:')
         if modify_name not in address_dic:
             print('修改失败!该名称项不存在!')
             continue;
         else:
             modify_to_name = input('请输入修改后的名称:')
             modify_value = address_dic[modify_name];
             address_dic[modify_to_name] = modify_value
             del address_dic[modify_name]
     ':
         select_name = input("请输入查询项名称:")
         if select_name not in address_dic:
             print('查询失败!该名称项不存在!')
             continue;
         else:
             history_list.append(address_dic)
             address_dic = address_dic[select_name]
             if not address_dic:
                 print('当前无地址')
     ':
         file = open('address.dic', 'w+', encoding='utf8')
         if history_list:
             file.write(str(history_list[0]))
         else:
             file.write(str(address_dic))
         file.close();
         break;
     else:
         print("输入错误")

运行结果:

address.dic:

 {'湖北': {'武汉': {}}, '广东': {'深圳': {}}}

扩展

eval(str):可将对应格式字符串转成相应类型对象.例:

 dic_str = "{'1':'a','2':'b'}"
 list_str = "['1','2','3']"
 dic = eval(dic_str)
 list = eval(list_str)
 print(dic,type(dic))
 print(list,type(list))
 #result:
     # {'1': 'a', '2': 'b'} <class 'dict'>
     # ['1', '2', '3'] <class 'list'>

with:类似C#中Using块,当前块执行完释放对象.下面两块代码等价.

 with open("test",'r') as file:
     file.read();
 file = open("test",'r')
 file.read()
 file.close()

编码与解码

推荐博客:https://www.cnblogs.com/OldJack/p/6658779.html

python基础(5)-文件操作的更多相关文章

  1. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  2. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  3. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  4. python基础14_文件操作

    文件操作,通常是打开,读,写,追加等.主要涉及 编码 的问题. #!/usr/bin/env python # coding:utf-8 ## open实际上是从OS请求,得到文件句柄 f = ope ...

  5. 【python基础】文件操作

    文件操作目录 一 .文件操作 二 .打开文件的模式 三 .操作文件的方法 四 .文件内光标移动 五. 文件的修改 一.文件操作介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用pyt ...

  6. python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...

  7. Python基础 之 文件操作

    文件操作 一.路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二.编码方式 utf-8 gbk... 三.操作方式 1.只读 r 和 rb 绝对路径的打开操作 ...

  8. Python基础--基本文件操作

    全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...

  9. python基础(10):文件操作

    1. 初识文件操作 使⽤python来读写⽂件是非常简单的操作.我们使⽤open()函数来打开⼀个⽂件,获取到⽂ 件句柄,然后通过⽂件句柄就可以进⾏各种各样的操作了,根据打开⽅式的不同能够执⾏的操 作 ...

  10. Python基础学习——文件操作、函数

    一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...

随机推荐

  1. Hadoop集群datanode磁盘不均衡的解决方案【转】

    一.引言: Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点,节点与节点之间磁盘大小不一样等等.当hdfs出现不平衡状况的时候,将引发很多问题,比 ...

  2. scrapy框架Selector提取数据

    从页面中提取数据的核心技术是HTTP文本解析,在python中常用的模块处理: BeautifulSoup  非常流行的解析库,API简单,但解析的速度慢. lxml 是一套使用c语言编写的xml解析 ...

  3. Linux零基础入门第四课

    根据直播讲义整理的内容,从第四课开始.前三课的内容若后面有精力会一并整理进来. 文件的基本操作(上) 创建.删除.复制.移动和重命名 touch命令创建文件 语法 >$ touch file0 ...

  4. [加密]openssl之数字证书签名,CA认证原理及详细操作

    转自:http://blog.sina.com.cn/s/blog_cfee55a70102wn3h.html 1 公钥密码体系(Public-key Cryptography) 公钥密码体系,又称非 ...

  5. go语言关键字图示

    Go语言一共有25个关键字,除了select,上文基本上已经一网打尽了.为了加深印象,我们用一张结构图来说明一下: 这张图如果看不清的话,我们将其拆成两张图,再注掉分支流程那部分的局部图: 分支流程部 ...

  6. JDK中Unsafe类详解

    Java中Unsafe类详解 在openjdk8下看Unsafe源码 浅析Java中的原子操作 Java并发编程之LockSupport http://hg.openjdk.java.net/jdk7 ...

  7. Java基础学习心得笔记

    对于很多只会C语言的初学者而言,面对java基础语法学习,反而感觉很难,其实其中最大的问题不是语法难,而是一种编程思想的转变.面向过程就是把你的代码封装成函数,然后依次去做一件事情,面向过程是把你要做 ...

  8. php项目,别人无法访问自己(windows 系统)上Apache服务器原因(转载)

    别人无法访问自己电脑上的Apache服务器,其中最大的原因是因为Windows防火墙的因素. 1.有安装防火墙的,把防火墙关闭 2.windows默认带防火墙的,进入 控制面板-系统和安全-Windo ...

  9. input 设置 width:100% 和padding后宽度超出父节点

    input 设置 width:100% 和padding后宽度超出父节点 添加如下css即可: box-sizing: border-box; -webkit-box-sizing: border-b ...

  10. Java进程与线程的区别

    每个进程都独享一块内存空间,一个应用程序可以同时启动多个进程.比如浏览器,打开一个浏览器就相当于启动了一个进程. 线程指进程中的一个执行流程,一个进程可以包含多个线程. 每个进程都需要操作系统为其分配 ...