python之文件
1、什么是文件指针?
文件指针 文件指针标记从哪个位置开始读取数据 第一次打开文件时,通常文件指针会指向文件的开始位置 当执行了read方法后,文件指针会移动到读取内容的末尾
创建一个当前目录下的文件pass
内容为:
westos
linux
dd
file = open('passwd')
text = file.read()
print text
print type(text)
print len(text)
print '*******'
# 移动文件指针到文件开头
file.seek(0)
text = file.read()
print len(text)
file.close()
2、
# 正确读取大文件
file = open('pass')
# 为什么要设定为无限循环:
# 因为我们不知道循环的条件
# 我们不知道文件到底有多少行
while True:text = file.readline()# 判断是否读取到了内容# 如果文件指针到文件的最后一行,那么就读取不到内容了if not text:break# 每读取一行的末尾已经有一个‘\n’print text
file.close()
3、
打开一个已经有的文件,读取完整的内容,并写到另一个文件中去
# 源文件以只读的方式打开
file_read = open('pass')
# 目标文件以只写的方式打开
file_write = open('pass_copy','w')# 从源文件中读取内容
text = file_read.read()
# 将读取到的内容写到目标文件
file_write.write(text)# 关闭文件
file_read.close()
file_write.close()
可以看到有一个文件pass_copy,打开后的内容和文件pass的内容一样,实现了文件内容的复制。
# 文件操作3部曲:打开 操作 关闭
# 打开
f = open('passwdss','a')
# 操作
#content = f.read()
f.write('linux')
#print content# 关闭文件
f.close()
经过上面的实验,可以总结:
r:
-只能读,不能写
-读取的文件不存在,会报错
r+:
-课读可写
-文件不存在,报错
w:
-只能写,不能读
-会清空问覆盖文件内容
-如果文件不存在,会新建文件
w+:
-可读可写
-文件存在,会覆盖原文件
-文件不存在,创建新文件
a:
-只能写,不能读
-文件不存在,新建文件不报错
-文件存在,不会清空文件内容
a+:
-可读可写
-文件不存在的时候,新建文件
-文件存在,不会覆盖原文件内容
4、读取二进制文件的时候
rb wb ab rb+ wb+ ab+
# 读取二进制文件的内容
f1 = open('cat.jpg',mode='rb')
content = f1.read()
f1.close()f2 = open('cat1.png',mode='wb')
f2.write(content)
f2.close()
总结:可以发现有一张与cat.jpg相同的图片出现,wb为在二进制文件不存在时新建文件。
综合练习题
要求:
1. 生成一个大文件ips.txt,要求1200行, 每行随机为172.25.254.0/24段的ip;
2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
import random
def create_ips_file(filename):ips = ['172.25.254.' + str(i) for i in range(1, 255)]with open(filename, 'a+') as f:for count in range(1200):f.write(random.sample(ips, 1)[0] + '\n')def sorted_by_ip(filename,count =10):ips_dict = dict()with open(filename) as f:for ip in f:if ip in ips_dict:ips_dict[ip] += 1else:ips_dict[ip] = 1sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse=True)[:count]return sorted_ip
print sorted_by_ip('ips.txt')
5、os模块:
#导入os模块
import os
1.返回操作系统类型,值为posix,是linux操作系统;值为nt,是windows系统。
print os.name
2.返回操作系统的详细
print os.uname()
3.系统的环境变量
print os.environ
print os.environ.get('PATH')
4.判断是否是绝对路径(不会判断文件或目录是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('/hello')
5.生成绝对路径
print os.path.abspath('hello.png')
print os.path.join('/home/kiosk', 'hello.png')
print os.path.join(os.path.abspath('.'), 'hello.png')
6. 获取目录名或者文件名
filename = '/home/kiosk/PycharmProjects/python/20180826python/Day08/hello.png'
print os.path.basename(filename)
print os.path.dirname(filename)
7. 创建目录/删除目录
os.mkdir('img')
os.makedirs('img/file') # mkdir -p
os.rmdir('img')
8. 创建文件/删除文件
os.mknod('westos.txt')
os.remove('westos.txt')
9.文件的重命名(mv)
os.rename('westos.txt','data1.txt')
10.判断文件或者目录是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')
11.分离后缀名和文件名
print os.path.splitext('hello.png')
12.将目录名和文件名分离
print os.path.split('/tmp/hello/hello.png')
例如:
1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
2.将当前img目录所有以.png结尾的后缀名改为.jpg
import os import random import stringdef gen_code(len=4):# 随机生成4位文件名,由字母和数字组成li = random.sample(string.ascii_letters + string.digits, len)# 将列表元素拼接成字符串return ''.join(li)def create_file():# 随机生成多个文件名li = {gen_code() for i in range(100)}os.mkdir('img')for name in li:os.mknod('img/' + name + '.png')# create_file()def modify_suffix(dirname, old_suffix, new_suffix):""":param dirname: 所要操作的目录:param old_suffix: 之前的文件后缀:param new_suffix: 新的文件后缀:return:"""# 1.判断查找的目录是否存在,如果不存在,显示报错if os.path.exists(dirname):# 2.找出所有以old_suffix(.png)结尾的文件pngfiles = [filename for filename in os.listdir(dirname)if filename.endswith(old_suffix)]# 3.将文件名和后缀名分开,留下文件名basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]print basefiles# 4.文件名重命名for filename in basefiles:# 需要加上目录名oldname = os.path.join(dirname, filename + old_suffix)newname = os.path.join(dirname, filename + new_suffix)os.rename(oldname, newname)print '%s 重命名成%s成功' % (oldname, newname)else:print '%s 不存在不能操作....' % dirnamemodify_suffix('img', '.jpg', '.png')
实验结果:
当前img目录所有以.png结尾的后缀名改为.jpg
相关文章:

一个6年的菜鸟,在4年之前做的一些功能(二)
前戏:针对上一篇列出来的功能点,今天和大家分享下这个自定义的公式是怎么设计的,由于我的第一篇博客在首页被管理员移走了,大家可以点击这里来跳转,看下第一篇的目录结构。本人作为老菜鸟,和大家分享的也是…

Oracle11.2新特性之listagg函数 (行列转换)
SELECT regexp_substr(公司1,贵公司2, [^,], 1, LEVEL, i) FROM dualCONNECT BY LEVEL < length(公司1,贵公司2) - length(REPLACE(公司1,贵公司2, ,, )) 1 以上为字符串带分隔符的转换为列 Oracle11.2新增了LISTAGG函数,可以用于字符串聚集,测试如下…
Mac 安装Android Studio
一、下载 可以通过以下这些网站下载Mac版的Android Studio http://www.androiddevtools.cn http://www.android-studio.org 二、安装 双击下载好的dmg文件,拖曳安装。 拷贝完成之后,在应用程序中打开Android Studio。这时候会引导进行环境安装和设置…
iscsi网络磁盘共享
iscsi(Internet SCSI)支持从客户端(发起端)通过IP向远程服务器上的ISCSI存储设备(目标)发送scsi命令。ISCSI限定名称用于确定发起端和目标,并采用iqn.yyy-mm.{reverse domain}:label的格式。 默认情况下,网…
转: IO设计模式:Reactor和Proactor对比
转: https://segmentfault.com/a/1190000002715832 平时接触的开源产品如Redis、ACE,事件模型都使用的Reactor模式;而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少;这里学习下其模型结构ÿ…

程序员该怎样放松?8个好网站推荐
1)看风景程序员每天在液晶屏幕下工作很长时间,应该让干涩的眼睛得到好好的放松,偶尔看看窗外的绿树或远处的风景可能是不错的方式,但是这在北京上海广州这样的大城市里不太现实,所以这里推荐一个纯粹的分享旅行照片的网…
【iOS】UIButton 图标在上文字在下
iOS默认的UIButton是图片在左文字在右,但是很多时候需求是图片在上文字在下(如效果图1、效果图2),因此想到,通过写一个JXButton继承自UIButton,并重写相关方法即可,以后项目中需要用的话就直接使…
多线程和mysql
多线程 1、多线程的定义: 什么是线程: 线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中, 是进程中的实际运作单位。一个进程中可以并发多个线程,每条线程并行执行不…

poj2154-color-polyan次二面体+欧拉函数优化
N<1e9,O(nlogn)的做法会超时。从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) 1 /*--------------------------------------------------------------------------------------*/2 3 #include <algorithm>4 #in…
【iOS】通讯录分组方式展示数据
本例子是将后台返回的医生列表(包含姓名和电话,demo从plist文件读取),按拼音进行分组显示(A-Z),最终效果如下图: 一、创建Doctor医生类: Doctor类属性包括姓名、电话以及姓名第一个字的拼音首字母ÿ…
LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
client->VS->RS->client(VS只做调度,RS为虚拟服务器) LVS_DR原理图解: 优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理 很巨大的请求量,这种方式…

【LeetCode】136. Single Number 解题小结
题目: Given an array of integers, every element appears twice except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 这题目的要求不仅是要求是线性时间…
iOS小技巧积累
平时项目中用到的,记录下来(持续更新)。1.在导航栏右边添加多个UIBarButtonItemUIBarButtonItem *searchScheduleBtn [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:"search_small"] style:UIBarButtonItemStylePl…

(转)iPhone开发经典语录集锦
1:如果无法保证子类行为的一致性,那么就用委托 If the subClass cannt keep with superClass,use delegate rather than inheritance. 2:屏幕上看到的,都是UIVew Everything you see on Screen is UIView. 3:如果对性能要求高,慎…
varnish 实现 CDN 缓存系统构建
cdn 搭建 (server1:172.25.1.1 ) : [roottest1 ~]# ls varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm [roottest1 ~]# yum install * -y [roottest1 ~]# cd /etc/varnish/ [roottest1 varnish]# vim /etc/sysconfig/varnish [roottest1 varnish]# sysct…

创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
在 ML2 配置文件中 enable local network 后,本节将开始创建第一个 local network。 我们将通过 Web GUI 创建第一个 local network。 首先确保各个节点上的 neutorn agent 状态正常。GUI 菜单 为 Admin -> System -> System Infomation -> Neutron Agents…
【Android】AsyncTask异步类
一、关于AysncTask AsyncTask使得多线程编程更加简单,AsyncTask能在后台线程执行异步任务,并且在UI线程更新界面,而不再需要用户去操作Thread和Handler。AysncTask是一个抽象类,类关系如下: public abstract class As…

高手速成android开源项目【blog篇】
主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织。Follow大神,深挖大神的项目和following,你会发现很多。 一、个人 JakeWharton 就职于SquareGithub地址:https://github.com/JakeWharton代表作:ActionBarSherlock&a…
3、LVS_TUN实现负载均衡
LVS_TUN实现负载均衡 LVS 介绍: LVS 是 Linux Virtual Server 的简称,在实际环境中经常作为 B/S 结构的网络应用中的负载均衡器来使用,工作在 7 层网络模型中的,网络层,也就是通常说的 IP 层,由于数据的处理是在 Linux 内核态完成的,所以相对反向代理服务器来说,性能一般会高一…

【Android】Fragment官方中文文档
以下内容来自Android官方文档。 Fragment 表示 Activity 中的行为或用户界面部分。您可以将多个片段组合在一个 Activity 中来构建多窗格 UI,以及在多个 Activity 中重复使用某个片段。您可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期…

关于MSSQL导入导出时主键与约束丢失的问题解决
导入数据时,使用默认选项,会丢失主键、约束、默认值等属性,按如下步骤操作:-->导出向导 -->选择数据源 -->选择目的 -->指定表复制或查询:不要使用默认选项,选择“在SQL Server数据库之间复制对…

Java5中的线程池实例讲解
Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供了丰富的API多线程编程在Java 5中更加容易,灵活。本文通过一个网络服务器模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列…
LNMP架构的搭建
LNMP 架构的搭建 基础架构图 环境: server5: nginx mysql php //需要的安装包 (蓝色为解压后的文件) [roottest5 ~]# /etc/init.d/iptables stop //关掉防火墙 MYSQL 源码安装 [roottest6 ~]#yum install -y gcc gcc-c make ncurses-devel bison opens…

NSString属性什么时候用copy,什么时候用strong?
我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境):strong与copy。那这两者有什么区别呢?什么时候该用strong,什么时候该用copy呢?让我们先来看个例子。 示例 我们定义一个类…

hihocoder 1152 Lucky Substrings
#1152 : Lucky Substrings 时间限制:10000ms单点时限:1000ms内存限制:256MB描述 A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Given a string consisting of only lower case letters, output all its lucky non-empt…

随笔,记2014忆往昔岁月
博客园开通了一年多,这是第一篇博客。在此记下我的第一篇博客,同时,回忆过去几年自己的工作所得所想所感。 大学毕业,工作两年半了,做过很多事,比较杂,做过需求,做过设计,…

PHP相关关系及定义
CGI(是一种协议): 是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。 web server(如nginx)是内容的分发者。 处理静态页面: 如果请求/index.html,web server就可以解…

Apache优化:修改最大并发连接数
http://www.365mini.com/page/apache-concurrency-configuration.htm Apache是一个跨平台的web服务器,由于其简单高效、稳定安全的特性,被广泛应用于计算机技术的各个领域。现在,Apache凭借其庞大的用户数,已成为用户数排名第一的…

黑马程序员___Java基础[02-Java基础语法](一)
Java语言基础组成 一、关键字 1)定义:被Java语言赋予了特殊含义的单词 2)特点:关键字中所有字母均为小写 3)作用及分类: 下面是Java语言保留专用的50个关键字: 用于定义数据类型的关键字(12个):…
NSLog打印自定义对象
我们在开发中,如果直接使用NSLog打印对象,则会打印对象的指针(如下图) 但我们常常希望打印的是对象的属性的值,因此我们需要重写自定义类的description方法(打印日志时,对象会收到description消…