文件倒读

In [1]: cat /tmp/1.txt
a  
b
c
d
In [2]: ll /tmp/1.txt  应该是有8个字符,每个字符后边都有一个换行符号\n,加上换行符共8个字节。
-rw-r--r--  1 admin  wheel  8  7  3 15:18 /tmp/1.txt
In [3]: f = open(‘/tmp/1.txt‘)
In [4]: f.tell()   指针位置:0 在文件的开头
Out[4]: 0
In [5]: f.read(1) 读一个字符
Out[5]: ‘a‘
In [6]: f.tell() 指针位置:1
Out[6]: 1
In [13]: f.read(1) 读一个字符
Out[13]: ‘\n‘

In [14]: f.tell() 指针位置:2
Out[14]: 2
In [15]: f.read(2)  读2个字节,b和\n
Out[15]: ‘b\n‘

In [16]: f.tell() 指针位置:4
Out[16]: 4

In [17]: f.read(100)
Out[17]: ‘c\nd\n‘

In [18]: f.tell()
Out[18]: 8

In [30]: help(f.seek)
Help on built-in function seek:

seek(...)
    seek(offset[, whence]) -> None.  Move to new file position.
    
    Argument offset is a byte count.  Optional argument whence defaults to
    0 (offset from start of file, offset should be >= 0); other values are 1
    (move relative to current position, positive or negative), and 2 (move
    relative to end of file, usually negative, although many platforms allow
    seeking beyond the end of a file).  If the file is opened in text mode,
    only offsets returned by tell() are legal.  Use of other offsets causes
    undefined behavior.
    Note that not all file objects are seekable.
    
    
0  从开头指针位置移动
In [45]: f.seek(2)
In [46]: f.tell()
Out[46]: 2
In [10]: f.seek(0,0) 移动指针到开头,从开头向后移动0位
In [11]: f.tell()
Out[11]: 0
1  从当前指针位置移动
f.tell()
Out[42]: 5
In [43]: f.seek(-2,1)
In [44]: f.tell()    
Out[44]: 3

2  从结尾的指针位置开始移动move relative to end of file
In [8]: f.seek(3,2)   8+3=11从结尾8向后移动三位,
In [9]: f.tell()
Out[9]: 11
In [12]: f.seek(0,2) 把指针移动到最后
In [13]: f.tell()
Out[13]: 8
admindeMacBook-Air-62:~ admin$ cat /tmp/1.txt 
a
b
c
d
#!/usr/bin/env python

f = open(‘/tmp/1.txt‘)
f.seek(0,2)
while True:
    if f.tell() == 1:
        break
    else:
        f.seek(-2,1)
        c = f.read(1)
        print c,
        
python seek.py
       
d 
c 
b 
a

#!/usr/bin/env python
#encoding:utf8
import sys
f = open(‘/etc/hosts‘)
f.seek(0,2)
line = ‘‘

while True:
    if f.tell() == 1:
        print line  #打印1a的条件
        break
    else:
        f.seek(-2,1)
        c = f.read(1)
        if c != ‘\n‘:
            line = c + line #空+d=d,4+d=4d
        else:
            print line
            line = ‘‘   #重置line=空

python seek3.py
221.228.208.76 dmp.chinadep.com admin.chinadep.com
时间: 2024-10-07 05:31:41

文件倒读的相关文章

c#文件之读操作摸索学习

主要知识点: 一. FileStream file_read = new FileStream("1.txt", FileMode.Open, FileAccess.Read);//只读权限打开1.txt文件 参数1: "1.txt":文件路径,通常用字符串变量或者字符串常量表示,如:"d:\\1.txt"; 参数2: FileMode.Open:打开模式,此种方式如果存在则打开,否则抛出异常. FileMode.Append:追加模式,打开文件

02_Android写xml文件和读xml文件

?? 新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.xmldemo" a

java中文件的读与写

最近一直在学习java中如何读取和写出文件,看了java API之后,发现在java.io中有很多关于文件读与写的类,下面就介绍几个经常用到的. 首先是:InputStream和OutputStream,API中说它俩是所有抽象类表示字节输入输出流的超类,所以在它们下面派生了很多子类.例如:FileInputStream和OutputStream等等.这些类都是以单字节的形式读入数据的,所以如果读入的数据中有中文字符,那么就会出现中文乱码现象. 其次是:Reader和Writer,这两个类是用于

asp.net 文件操作小例子(创建文件夹,读,写,删)

静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; string path = Server.MapPath("") + "\\" + name; if (Directory.Exists(path)) { Response.Write("<script>alert('文件夹已存在了!');history.go(

如何实现共享文件夹可读,文件不可读不可拷贝

如何实现共享文件夹,可以列出文件,而文件本身不可读,不可拷贝 问题:如何实现共享文件夹可读,文件不可读不可拷贝? 实验环境:win7 旗舰版.局域网 步骤及说明: 右击[右下角网络图标],进入"打开网络和共享中心",进入"更改高级共享设置",开启"启用密码保护共享"(说明:我启用该设置是为了访问共享时需要输入账户密码) 创建访问共享所需要的账户,右键"我的计算机"进入"管理",在"本地用户和组&q

Linux内核的文件预读readahead

Linux的文件预读readahead,指Linux系统内核将指定文件的某区域预读进页缓存起来,便于接下来对该区域进行读取时,不会因缺页(page fault)而阻塞.因为从内存读取比从磁盘读取要快很多.预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一. 维基百科上关于readhead的介绍资料: readahead is a system call of the Linux kernel that loads a file's content

Linux文件预读对系统的影响

Linux系统很重要的一个性能提升点就是它的Pagecache, 因为内存比IO快太多了,所以大家都想进办法来利用这个cache. 文件系统也不例外,为了达到高性能,文件读取通常采用预读来预测用户的行为,把用户可能需要的数据预先读取到cache去,达到高性能的目的. Linux各个发行版readahead的实现差异很大,我们这里重点讨论2.6.18, RHEL 5U4发行版的行为.文件预读的实现主要在mm/readahead.c中,代码才603行. 预读的流程大概是这样的,用户需要文件页面的时候

利用FileChannel完成文件的读、写、复制

内容:通过NIO中的FileChannel完成文件的读.写.复制. public class NioFileCopy { private RandomAccessFile aFile = null; private FileChannel inChannel = null; private final ByteBuffer buf = ByteBuffer.allocate(1024); public void doWrite() throws IOException { aFile = new

python文件处理-读、写

Python中文件处理的操作包括读.写.修改,今天我们一起来先学习下读和写操作. 一.文件的读操作 例一: #文件读操作 f = open(file="first_blog.txt",mode = 'r',encoding='gbk') #'r'表示只读模式(打开仍然为文件),encoding = 'gbk'表示原文件的存储格式为'gbk',打开时必须告诉程序将gbk转成unicode(python3编码默认Unicode) data = f.read() # 读取所有内容,内容是已经