一、文件的打开和创建

>>> f = open('/tmp/test.txt')

>>> f.read()

'hello python!\nhello world!\n'

>>> f

二、文件的读取步骤:打开 -- 读取 -- 关闭

>>> f = open('/tmp/test.txt')

>>> f.read()

'hello python!\nhello world!\n'

>>> f.close()

读取数据是后期数据处理的必要步骤。.txt是广泛使用的数据文件格式。一些.csv, .xlsx等文件可以转换为.txt 文件进行读取。我常使用的是Python自带的I/O接口,将数据读取进来存放在list中,然后再用numpy科学计算包将list的数据转换为array格式,从而可以像MATLAB一样进行科学计算。

下面是一段常用的读取txt文件代码,可以用在大多数的txt文件读取中

filename = 'array_reflection_2D_TM_vertical_normE_center.txt' # txt文件和当前脚本在同一目录下,所以不用写具体路径

pos = []

Efield = []

with open(filename, 'r') as file_to_read:

while True:

lines = file_to_read.readline() # 整行读取数据

if not lines:

break

pass

p_tmp, E_tmp = [float(i) for i in lines.split()] # 将整行数据分割处理,如果分割符是空格,括号里就不用传入参数,如果是逗号, 则传入‘,'字符。

pos.append(p_tmp) # 添加新读取的数据

Efield.append(E_tmp)

pass

pos = np.array(pos) # 将数据从list类型转换为array类型。

Efield = np.array(Efield)

pass

例如下面是将要读入的txt文件

经过读取后,在Enthought Canopy的variable window查看读入的数据, 左侧为pos,右侧为Efield。

三、文件写入(慎重,小心别清空原本的文件)步骤:打开 -- 写入 -- (保存)关闭

直接的写入数据是不行的,因为默认打开的是'r' 只读模式

>>> f.write('hello boy')

Traceback (most recent call last):

File "", line 1, in

IOError: File not open for writing

>>> f

应该先指定可写的模式

>>> f1 = open('/tmp/test.txt','w')

>>> f1.write('hello boy!')

但此时数据只写到了缓存中,并未保存到文件,而且从下面的输出可以看到,原先里面的配置被清空了

[root@node1 ~]# cat /tmp/test.txt

[root@node1 ~]#

关闭这个文件即可将缓存中的数据写入到文件中

>>> f1.close()

[root@node1 ~]# cat /tmp/test.txt

[root@node1 ~]# hello boy!

注意:这一步需要相当慎重,因为如果编辑的文件存在的话,这一步操作会先清空这个文件再重新写入。那么如果不要清空文件再写入该如何做呢?

使用r+ 模式不会先清空,但是会替换掉原先的文件,如下面的例子:hello boy! 被替换成hello aay!

>>> f2 = open('/tmp/test.txt','r+')

>>> f2.write('\nhello aa!')

>>> f2.close()

[root@node1 python]# cat /tmp/test.txt

hello aay!

如何实现不替换?

>>> f2 = open('/tmp/test.txt','r+')

>>> f2.read()

'hello girl!'

>>> f2.write('\nhello boy!')

>>> f2.close()

[root@node1 python]# cat /tmp/test.txt

hello girl!

hello boy!

可以看到,如果在写之前先读取一下文件,再进行写入,则写入的数据会添加到文件末尾而不会替换掉原先的文件。这是因为指针引起的,r+ 模式的指针默认是在文件的开头,如果直接写入,则会覆盖源文件,通过read() 读取文件后,指针会移到文件的末尾,再写入数据就不会有问题了。这里也可以使用a 模式

>>> f = open('/tmp/test.txt','a')

>>> f.write('\nhello man!')

>>> f.close()

>>>

[root@node1 python]# cat /tmp/test.txt

hello girl!

hello boy!

hello man!

关于其他模式的介绍,见下表:

文件对象的方法:

f.readline()   逐行读取数据

方法一:

>>> f = open('/tmp/test.txt')

>>> f.readline()

'hello girl!\n'

>>> f.readline()

'hello boy!\n'

>>> f.readline()

'hello man!'

>>> f.readline()

''

方法二:

>>> for i in open('/tmp/test.txt'):

... print i

...

hello girl!

hello boy!

hello man!

f.readlines() 将文件内容以列表的形式存放

>>> f = open('/tmp/test.txt')

>>> f.readlines()

['hello girl!\n', 'hello boy!\n', 'hello man!']

>>> f.close()

f.next()   逐行读取数据,和f.readline() 相似,唯一不同的是,f.readline() 读取到最后如果没有数据会返回空,而f.next() 没读取到数据则会报错

>>> f = open('/tmp/test.txt')

>>> f.readlines()

['hello girl!\n', 'hello boy!\n', 'hello man!']

>>> f.close()

>>>

>>> f = open('/tmp/test.txt')

>>> f.next()

'hello girl!\n'

>>> f.next()

'hello boy!\n'

>>> f.next()

'hello man!'

>>> f.next()

Traceback (most recent call last):

File "", line 1, in

StopIteration

f.writelines()   多行写入

>>> l = ['\nhello dear!','\nhello son!','\nhello baby!\n']

>>> f = open('/tmp/test.txt','a')

>>> f.writelines(l)

>>> f.close()

[root@node1 python]# cat /tmp/test.txt

hello girl!

hello boy!

hello man!

hello dear!

hello son!

hello baby!

f.seek(偏移量,选项)

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

>>> f.readline()

'hello girl!\n'

>>> f.readline()

'hello boy!\n'

>>> f.readline()

'hello man!\n'

>>> f.readline()

' '

>>> f.close()

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

>>> f.read()

'hello girl!\nhello boy!\nhello man!\n'

>>> f.readline()

''

>>> f.close()

这个例子可以充分的解释前面使用r+这个模式的时候,为什么需要执行f.read()之后才能正常插入

f.seek(偏移量,选项)

(1)选项=0,表示将文件指针指向从文件头部到“偏移量”字节处

(2)选项=1,表示将文件指针指向从文件的当前位置,向后移动“偏移量”字节

(3)选项=2,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节

偏移量:正数表示向右偏移,负数表示向左偏移

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

>>> f.seek(0,2)

>>> f.readline()

''

>>> f.seek(0,0)

>>> f.readline()

'hello girl!\n'

>>> f.readline()

'hello boy!\n'

>>> f.readline()

'hello man!\n'

>>> f.readline()

''

f.flush()    将修改写入到文件中(无需关闭文件)

>>> f.write('hello python!')

>>> f.flush()

[root@node1 python]# cat /tmp/test.txt

hello girl!

hello boy!

hello man!

hello python!

f.tell()   获取指针位置

>>> f = open('/tmp/test.txt')

>>> f.readline()

'hello girl!\n'

>>> f.tell()

12

>>> f.readline()

'hello boy!\n'

>>> f.tell()

23

四、内容查找和替换

1、内容查找实例:统计文件中hello个数

思路:打开文件,遍历文件内容,通过正则表达式匹配关键字,统计匹配个数。

[root@node1 ~]# cat /tmp/test.txt

hello girl!

hello boy!

hello man!

hello python!

脚本如下:

方法一:

#!/usr/bin/python

import re

f = open('/tmp/test.txt')

source = f.read()

f.close()

r = r'hello'

s = len(re.findall(r,source))

print s

[root@node1 python]# python count.py

4

方法二:

#!/usr/bin/python

import re

fp = file("/tmp/test.txt",'r')

count = 0

for s in fp.readlines():

li = re.findall("hello",s)

if len(li)>0:

count = count + len(li)

print "Search",count, "hello"

fp.close()

[root@node1 python]# python count1.py

Search 4 hello

2、替换实例:把test.txt 中的hello全部换为"hi",并把结果保存到myhello.txt中。

#!/usr/bin/python

import re

f1 = open('/tmp/test.txt')

f2 = open('/tmp/myhello.txt','r+')

for s in f1.readlines():

f2.write(s.replace('hello','hi'))

f1.close()

f2.close()

[root@node1 python]# touch /tmp/myhello.txt

[root@node1 ~]# cat /tmp/myhello.txt

hi girl!

hi boy!

hi man!

hi python!

实例:读取文件test.txt内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为result.txt。test.txt 的内容如下所示:

#some words

Sometimes in life,

You find a special friend;

Someone who changes your life just by being part of it.

Someone who makes you laugh until you can't stop;

Someone who makes you believe that there really is good in the world.

Someone who convinces you that there really is an unlocked door just waiting for you to open it.

This is Forever Friendship.

when you're down,

and the world seems dark and empty,

Your forever friend lifts you up in spirits and makes that dark and empty world

suddenly seem bright and full.

Your forever friend gets you through the hard times,the sad times,and the confused times.

If you turn and walk away,

Your forever friend follows,

If you lose you way,

Your forever friend guides you and cheers you on.

Your forever friend holds your hand and tells you that everything is going to be okay.

脚本如下:

f = open('cdays-4-test.txt')

result = list()

for line in f.readlines(): # 逐行读取数据

line = line.strip() #去掉每行头尾空白

if not len(line) or line.startswith('#'): # 判断是否是空行或注释行

continue #是的话,跳过不处理

result.append(line) #保存

result.sort() #排序结果

print result

open('cdays-4-result.txt','w').write('%s' % '\n'.join(result)) #保存入结果文件

python txt文件 报文分析_Python读写txt文本文件的操作方法全解析相关推荐

  1. python读取txt文件写入-Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python! hello world! ...

  2. Python读写txt文本文件的操作方法全解析

    这篇文章主要介绍了Python读写txt文本文件的操作方法全解析,包括对文本的查找和替换等技巧的讲解,需要的朋友可以参考下 一.文件的打开和创建 ? 1 2 3 4 5 >>> f ...

  3. python关闭读写的所有的文件-Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 >>> f = open('/tmp/test.txt') >>> f.read() 'hello python! hello world! ...

  4. python读文本文件的过程是怎样的_读写文本文件的步骤_Python读写txt文本文件的操作方法全解析...

    一.文件的打开和创建 >>> f=open('/tmp/test.txt') >>> f.read() 'hello python!hello world!' &g ...

  5. c++ 按行读取txt文件并赋值_python操作txt文件中数据教程[3]python读取文件夹中所有txt文件并将数据转为csv文件...

    觉得有用的话,请点击右下角 推荐给更多小伙伴 neoken_xuAsurada2015Evacloud 参考文献 python 操作 txt 文件中数据教程[1]-使用 python 读写 txt 文 ...

  6. python 读取txt文件为字典_python将txt文件读取为字典的示例

    如下所示: # -*- coding: utf-8 -*- # @Time :18-8-2 下午3:23 import sys reload(sys) sys.setdefaultencoding(' ...

  7. python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表

    很多时候,我们将数据存在txt或者csv格式的文件里,最后再用python读取出来,存到数组或者列表里,再做相应计算.本文首先介绍写入txt的方法,再根据不同的需求(存为数组还是list),介绍从tx ...

  8. python教程文件 txt_Python读写txt文本文件的操作方法全解析

    filename = 'array_reflection_2D_TM_vertical_normE_center.txt' # txt文件和当前脚本在同一目录下,所以不用写具体路径 pos = [] ...

  9. pythontxt文件操作_Python读写txt文本文件的操作方法全解析

    一.文件的打开和创建 ? 1 2 3 4 5 >>> f= open('/tmp/test.txt') >>> f.read() 'hello python!\nh ...

最新文章

  1. python numpy加速 cupy
  2. asp.NET自定义服务器控件内部细节系列教程五
  3. l源码安装mysql升级_[Linux]javaEE篇:源码安装mysql
  4. RabbitMQ管理(3)——Web端管理
  5. IDEA手动导入jar包
  6. HDU 1018 Big Number
  7. 用nifi把hdfs数据导到hive
  8. 【转】建立一个更高级别的查询 API:正确使用Django ORM 的方式
  9. bilstmcrf词性标注_深度学习--biLSTM_CRF 命名实体识别
  10. cad快看_浩辰CAD看图王教你免费打开超大CAD图纸!
  11. Android中经纬度与度分秒互转
  12. Stata:投资组合有效边界
  13. Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8
  14. java中如何配置前端项目,将后端或前端项目部署到云服务器上
  15. 城阳区人才共有产权住房细则
  16. day06三级缓存 二次采样
  17. 订阅发布功能Java实现
  18. 磁性开关的种类和工作原理
  19. 多效蒸发课程设计php程序
  20. 【初篇】DHT11连接STM32、One wire单总线原理、GPIO代码详解

热门文章

  1. 测试面试必问点【干货】建议收藏!!
  2. 埃斯顿服务器上电无显示,埃斯顿伺服常见现象报警及排除
  3. 计算机与程序设计基础 vb,《VB程序设计基础》第4章 函数与过程
  4. 剑指offer面试题[31]-连续数组的最大和
  5. 21天Jenkins打卡Day17-查看Jenkins服务器上的目录结构
  6. 测试架构师10年经验分享:测试小工到资深专家必备这5项技能
  7. html5%3cimg%3e属性,汽车之家存储型xss可大规模获取任何用户cookie
  8. python有类似spring_Python的Spring与J的Spring相比
  9. 牛顿(Newton)插值及其MATLAB程序
  10. 远程服务器格式化,怎么远程服务器做ghost备份图解