一.文件基本操作

  1.文件的打开 

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作  

   文件句柄 = open('文件路径', '模式')

2.文件的读取

>>> f = open("f:/test.txt", "r")
>>> f.read()
'hello,world'
>>> f.close

  3.打开文件的模式有:  

  • r ,只读模式【默认】
  • w,只写模式【不可读;不存在则创建;存在则清空内容;】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】
>>> f = open("f:/test.txt", 'r+')
>>> f.read()
'heheo,world~~'
>>> f.write("\naaaaaaa")
8
>>> f.tell()
22
>>> f.read()
''
>>> f.tell()
22
>>> f.seek(0)
0
>>> f.read()
'heheo,world~~\naaaaaaa'

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b
#以二进制文件写
f = open("file.txt", "wb")
str_data = "呵呵"
bytes_data = bytes(str_data, encoding='utf-8')
f.write(bytes_data)
f.close()
#以二进制文件读
f = open("file.txt",'rb')
data = f.read()
f.close()
print(data)
str_data = str(data,encoding="utf-8")
print(str_data)

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

  4. r+, w+, x+, a+ 区别

  r+ 可读,可写,若文件不存在会报错,根据指针位置可写随意位置

  w+ 可写,可读,若文件不存在会创建,在进行写操作会清空文件内容

  x+ 可写,可读,若文件存在会报错,不存在则创建

  a+ 可写,可读,只能追加在文件尾部

5.文件内部支持操作:

readline()   逐行读取数据

#逐行去读,较省内存
f = open('log','r')
result = list()
for line in open('log'):
line = f.readline()
print(line)
result.append(line)
print(result)
f.close()

trancate(),从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除

>>> with open("f:/test.txt" , 'r+') as f:
... f.seek(2)
... f.truncate(3)
...
2
3
>>> with open("f:/test.txt" , 'r+') as f:
... f.read()
...
'hel'

read(),读取文件内容

>>> with open("f:/test.txt" , 'r+') as f:
... f.read()
...
'hel'

write(),写入内容

>>> with open("f:/test.txt" , 'r+') as f:
... f.read()
... f.write('llo' + '\n' + 'test')
... f.seek(0)
... f.read()
...
'hel'
8
0
'helllo\ntest'

readlines(), 将文件内容以列表的形式存放,---->[“第一行”, "第二行"] 

>>> with open("f:/test.txt" , 'r+') as f:
... temp = f.readlines()
... print(temp)
...
['heheo,world~~\n', 'aaaaaaa']

open(),打开文件

>>> f = open('f:/test.txt', 'r')

close(),关闭文件

 f.close()

flush(),强行刷入硬盘  

tell()  获取指针位置
seek()  跳转到某个位置

二.管理上下文

为了避免打开文件后忘记关闭,可以通过管理上下文

with open("log", 'r+') as f:
data = f.read()
print(data)

三.练习 

编写脚本实现 ,用户登录,注册,改密,删除功能

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#删除用户,修改密码
def login(username, password):
"""
用户登录验证
:param username: 用户名
:param password: 密码
:return: True成功,False失败
"""
f = open('log', 'r', encoding='utf-8')
for line in f:
line = line.strip()
userlist = line.split('$')
if username == userlist[0] and password == userlist[1]:
return True
return False def user_ex(username):
"""
用于检测用户是否存在
:param username: 用户名
:return: True 表示存在,False用户不存在
"""
with open('log','r',encoding='utf-8') as f:
for line in f:
line = line.strip()
userlist = line.split('$')
if username in userlist:
return True
return False def res(username, password):
"""
用于用户注册
:param username: 用户名
:param password: 密码
:return: True注册成功
"""
with open('log','a',encoding='utf-8') as f:
temp = "\n" + username + "$" + password
f.write(temp)
return True def change_pwd(username, password):
"""
用户修改密码
:param username: 用户名
:param password: 修改后的密码
:return: True修改成功,False修改失败
"""
file_object = open('log')
try:
lines=open('log','r').readlines()
for i in range(len(lines)):
if username in lines[i]:
test=lines[i].split('$')[1]
lines[i]=lines[i].replace(test,password)
open('log','w').writelines(lines)
return True
return False
finally:
file_object.close( ) def del_user(username):
"""
删除用户
:param username: 要删除用户名
:return: true 删除成功,False用户名不在列表中
"""
file_object = open('log')
try:
lines = open('log', 'r').readlines()
for i in range(len(lines)):
if username in lines[i]:
del lines[i]
print(lines)
open('log','w').writelines(lines)
return True
else:
return False
finally:
file_object.close() # def del_user(username):
# with open('log', 'r') as f:
# for line in f:
# if re.match("lisi", line):
# pass
# else:
# data = line
# with open('log', 'w+') as f:
# f.write(data)
# return True
# return False def main():
inp = input("1:登录;2:注册;3:删除用户;4:修改密码")
user = input("请输入用户名:")
pwd = input("请输入密码:")
if inp == "":
ret = login(user, pwd)
if ret:
print("登录成功")
else:
print("登录失败")
elif inp == "":
is_ex = user_ex(user)
if is_ex:
print("用户已存在,无法注册")
else:
resgister = res(user, pwd)
if resgister:
print("用户已成功注册")
else:
print("注册失败")
elif inp == "":
del_us = del_user(user)
if del_us:
print("已删除")
else:
print("无此用户")
elif inp == "":
is_chage = change_pwd(user, pwd)
if is_chage:
print("修改成功")
else:
print("无此用户") main()

2.haproxy配置文件更改操作

需求:

  1.匹配值 ,并将匹配到的内容以列表形式返回给用户

  2.插入内容,用户input数据后,将数据更新至配置文件中

global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info
defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234 frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www backend www.oldboy.org
server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000 backend buy.oldboy.org
server 100.1.7.90 100.1.7.90 weight 20 maxconn 3000

配置文件

#!/usr/bin/env python
# -*- coding:utf-8 -*- def fetch(backend):
result = []
with open('ha.conf', 'r') as f:
flag = False
for line in f:
if line.strip().startswith('backend') and line.strip() == "backend " + backend:
flag = True
continue
if flag and line.strip().startswith('backend'):
break
if flag and line.strip():
result.append(line.strip()) return result def add(backend, record):
result = fetch(backend)
if not result:
# 无backend,无record
pass
else:
# 有backend
if record in result:
# 记录record
pass
else:
result.append(record)
with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:
continue_flag = False
for line in old: if line.strip().startswith('backend') and line.strip() == "backend " + backend:
continue_flag = True
new.write(line)
for temp in result:
new.write(" "*8 + temp + "\n")
continue if continue_flag and line.strip().startswith('backend'):
continue_flag = False if continue_flag:
pass
else:
new.write(line) def add2(backend, record):
with open('ha.conf', 'r') as old, open('new.conf', 'w') as new:
in_backend = False
has_backend = False
has_record = False
for line in old:
if line.strip().startswith('backend') and line.strip() == "backend " + backend:
has_backend = True
in_backend = True
new.write(line)
continue if in_backend and line.strip().startswith('backend'):
if not has_record:
new.write(" "*8 + record + '\n')
new.write(line)
in_backend = False
continue if in_backend and line.strip() == record:
has_record = True
new.write(line)
continue if line.strip():
new.write(line) if not has_backend:
# 写backend,写record
new.write('backend '+ backend + '\n')
new.write(' '*8 + record + '\n') # ret = fetch("www.oldboy.org")
# print(ret) # add('www.oldboy.org', "server 100.1.7.10 100.1.7.10 weight 20 maxconn 3000")
# add2('www.oldboy.org', "server 100.1.7.11 100.1.7.11 weight 20 maxconn 3000")

3. 号码段截取

需求:

  将文件中的第二列前三字节和后四字节以逗号分开,文件格式如下:

1,"1300000","山东","济南","中国联通","0531","250000"
2,"1300001","江苏","常州","中国联通","0519","213000"
3,"1300002","安徽","巢湖","中国联通","0565","238000"
4,"1300003","四川","宜宾","中国联通","0831","644000"
5,"1300004","四川","自贡","中国联通","0813","643000"

  需求目标:

1,"130","0000","山东","济南","中国联通","0531","250000"

代码实现:
def phone():
with open("mobile", "w+") as nf, open("Mobile.txt", "r") as f:
for row in f:
row = row.strip().split(',')
row = (row[:1] + [row[1][:4]+'"', '"' + row[1][4:]] + row[2:])
nf.write(str(row).strip('[]').replace('" ', "")+'\n')

  

python 之文件操作的更多相关文章

  1. Python :open文件操作,配合read()使用!

    python:open/文件操作 open/文件操作f=open('/tmp/hello','w') #open(路径+文件名,读写模式) 如何打开文件 handle=open(file_name,a ...

  2. Python 常见文件操作的函数示例(转)

    转自:http://www.cnblogs.com/txw1958/archive/2012/03/08/2385540.html # -*-coding:utf8 -*- ''''' Python常 ...

  3. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  4. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  5. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  6. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  7. Python常见文件操作的函数示例

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...

  8. python的文件操作及简单的用例

    一.python的文件操作介绍 1.文件操作函数介绍 open() 打开一个文件 语法:open(file, mode='r', buffering=-1, encoding=None, errors ...

  9. python基本文件操作

    python文件操作 python的文件操作相对于java复杂的IO流简单了好多,只要关心文件的读和写就行了 基本的文件操作 要注意的是,当不存在某路径的文件时,w,a模式会自动新建此文件夹,当读模式 ...

  10. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

随机推荐

  1. HDU 6052 To my boyfriend(容斥+单调栈)

    题意:对于一个n*m的方格,每个格子中都包含一种颜色,求出任意一个矩形包含不同颜色的期望. 思路: 啊啊啊啊啊,补了两天,总算A了这道题了,简直石乐志,前面的容斥还比较好写,后面的那个>13那个 ...

  2. for循环输出i为同一值的问题

    使用闭包将变量i的值保护起来. //sava1:加一层闭包,i以函数参数形式传递给内层函数 for( var i=0; i<ps.length; i++ ) { (function(arg){ ...

  3. 变色龙启动MAC时,错误信息“ntfs_fixup: magic doesn't match:”的解决办法

    如下是变色龙启动的bdmesg,解决办法就是用mac的磁盘管理器,对ntfs分区进行检验修复.需要安装ntfs的驱动支持. 实在不行,就删除调整过大小的分区,重新用Windows的磁盘管理器重新分区. ...

  4. HTML 显示和隐藏浏览器滚动条

    滚动条和overflow有关 显示: overflow-x:auto; overflow-y:auto; overflow-x:scroll; overflow-y:scroll; 隐藏: overf ...

  5. 长链剖分优化dp三例题

    首先,重链剖分我们有所认识,在dsu on tree和数据结构维护链时我们都用过他的性质. 在这里,我们要介绍一种新的剖分方式,我们求出这个点到子树中的最长链长,这个链长最终从哪个儿子更新而来,那个儿 ...

  6. 【数论 dp】2048

    考场上一个DFS优化乱加就对了一个无解的点 题目描述 给定一个长度为 n 的数列,在这个数列中选取一个子序列使得这个子序列中的数能合出2048 对于合并操作,可以选择这个序列中的任意两个数进行合并,当 ...

  7. mysql查询数据包太大:max_allowed_packet

    查询大小: show variables like '%max_allowed_packet%'; 修改大小: set global max_allowed_packet = 1024 * 1024 ...

  8. MySQL binlog-server搭建

    MySQL binlog-server搭建 binlog在备份中起着至关重要的作用,备份binlog文件时,只能先在本地备份,然后才能传送到远程服务器上.从MySQL5.6版本后,可以利用mysqlb ...

  9. (46)zabbix报警媒介:Jabber

    Jabber有第三方插件,能让Jabber用户和MSN.YahooMessager.ICQ等IM用户相互通讯.因为Google遵从Jabber协议,并且Google已经将Gtalk的服务器开放给了其它 ...

  10. 解决vm安装centos7网络无法启动问题

    采用以下命令: systemctl stop NetworkManager systemctl disable NetworkManager