Python3中简单的文件操作及两个简单小实例分享


Posted in Python onJune 18, 2017

前言

首先介绍一下什么叫做相对路径和绝对路径,我们程序狗家族想必都是懂这个的,但是难免会有童鞋忘记。所以码出来供大家快速回忆一下。

相对路径

相对路径是相对于文件当前的工作路径而言的

绝对路径

绝对路径是由文件名和它的完整路径以及驱动器字母组成的,如果是Windows系统,那么某一个文件的绝对路径可能是:

c:\pythonworkspace\firstpy.py

在Unix平台上,文件的绝对路径可能是: /home/sherlockblaze/Documents/pythonworkspace/firstpy.py

文件类型

文件大概可以分为文本文件和二进制文件。在不同操作系统下,可以用文本编辑器编辑的文件,都称为文本文件,那么其他的文件就属于二进制文件。而二进制文件相比与文本文件的优势在于二进制文件的处理效率更高一些。

读取文件的开始

读取一个文件的思路永远都是相同的,第一步自然就是打开一个文件。在python中我们通过如下代码使用open函数来打开一个文件。

input = open(filepath,mode)

我们的mode主要由以下几种方式。

模式 作用
r 读取模式
w 写入模式
a 追加模式
rb 读取二进制数据模式打开文件
wb 写入二进制数据模式打开文件

同样我们有两种途径来打开文件。

通过绝对路径

input = open("/Users/sherlockblaze/Documents/pythonworkspace/Test.txt","r")

通过相对路径(需要注意的是,我们通过相对路径是可以打开当前工作目录下的文件的,也就是说如果我的.py文件存在 /User/sherlock/Documents 下的话,我们通过相对路径打开的文件也同样存在当前路径下)

input = open("Test.txt","r")

注意

在Windows下我们通过绝对路径来打开文件的时候,我们需要在绝对文件名前加上一个 r 前缀,来表示这个字符串是一个行字符串,这样可以让python解释器将文件中的反斜线理解成字面意义上的反斜线。例如:

input = open(r"d:\pythonworkspace\Test.txt","r")

如果我们不添加 r 作为前缀,则需要用转义字符把上面的语句修改成如下所示:

input = open("d:\\pythonworkspace\\Test.txt","r")

向文件中写入数据

我们首先通过写入的方式打开文件,然后通过调用write方法,向文件中写入数据。

def main():
 input = open("Test.txt","w")
 input.write("SherlockBlaze")
 input.write("\t is the most handsome guy!\n")
 input.close()
 
main()

通过这种方式,我们往当前目录下的 Test.txt 文件中写入了 SherlockBlaze is the most handsome guy! 这句话,并且需要注意的是,我们在写完文件后,调用close()方法关闭了文件流。

常见小特性

当使用w模式打开一个文件时,如果文件不存在,open函数就会创建一个新文件,如果该文件存在,那么这个文件里的内容会被心的内容覆盖。当我们用读/写模式打开文件的时候,文件内部会添加一个叫做文件指针的特殊标记,文件的读写操作都发生在指针当前位置上。

判断文件是否存在

为了避免误操作,我们可以通过os.path模块中的isFile函数来判断一个文件是否存在。即:

import os.path
is os.paht.isfile("Test.txt"):
 print("Test.txt exists")
else:
 print("Test.txt doesn't exists")

简单小程序

输入文件路径,并且从中计算各个字母出现的次数

def main():
 filename = input("Enter a filename: ").strip()
 infile = open(filename,"r")
 counts = 26 * [0]
 for line in infile:
 countLetters(line.lower(),counts)
 for i in range(len(counts)):
 if counts[i] != 0:
 print(chr(ord('a') + i) + "appears " + str(counts[i])
 + (" time" if counts[i] == 1 else " times"))
 infile.close()
def countLetters(line,counts):
 for ch in line:
 if ch.isalpha():
 counts[ord(ch) - ord('a')] += 1
main()

思路简单叙述:首先创建数组,每当读取到一个字符,对对应位置的数字进行加一,最后在进行遍历得到输出。

下载网站源代码,然后写入目的文件中

import sys
import urllib
import urllib.request
import os.path
def download(url,num_retries = 2):
 print ('Downloading:',url)
 try:
 html = urllib.request.urlopen(url).read()
 except urllib.URLError as e:
 print ('Download error:',e.reason)
 html = None
 if num_retries > 0:
 if hasattr(e,'code') and 500 <= e.code <600:
 return download(url,num_retries-1)
 return html
def main():
 url = input("Enter a url:\n").strip()
 f2 = input("Enter a target file:\n").strip()
 if os.path.isfile(f2):
 print(f2 + " already exists")
 sys.exit()
 html = download(url)
 target = open(f2,"w")
 content = html.decode(encoding="utf-8")
 target.write(content)
 target.close()
main()

比如我输入网址 http://www.game2.cn/,在输入目的文件:game2.txt。即可进行下载并把对应html输入到当前工作目录的game2.txt文件中。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python多线程抓取天涯帖子内容示例
Apr 03 Python
Python实现XML文件解析的示例代码
Feb 05 Python
PyTorch CNN实战之MNIST手写数字识别示例
May 29 Python
python实现电脑自动关机
Jun 20 Python
python实现随机梯度下降法
Mar 24 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
小结Python的反射机制
Sep 28 Python
python 爬取豆瓣网页的示例
Apr 13 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 Python
python实现各进制转换的总结大全
Jun 18 #Python
Mac 上切换Python多版本
Jun 17 #Python
利用python实现xml与数据库读取转换的方法
Jun 17 #Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 #Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 #Python
Python生成随机密码的方法
Jun 16 #Python
Python操作SQLite数据库的方法详解
Jun 16 #Python
You might like
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP中如何使用session实现保存用户登录信息
2015/10/20 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
基于JavaScript实现焦点图轮播效果
2017/03/27 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
python调用staf自动化框架的方法
2018/12/26 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
几个Shell Script面试题
2014/04/18 面试题
大一军训感言
2014/01/09 职场文书
教师教学评估方案
2014/05/09 职场文书
化验员岗位职责
2015/02/14 职场文书
中英文求职信范文
2015/03/19 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android