python读取文件,readline和readlines区别

简介:

文件123内容

123
456
789

操作:

f = open('123','r')
line = f.readline()
print line[0] #1
print line[-1] #\n 回车
print line[1,-1]       #23,注意从1 到-1 但是不包括line[-1],而包括开始位置line[1]

注意:

f.readline()完成后最后一个字符是 ‘\n’,此时光标已经定位到了下一行的第0个位置

但是读第三行时 print line[-1]是9而不是'\n',因为此时最后一行不存在换行符

那么这样就好解决这个问题了:想在第一行后面加'hello',这样编程就错了:

f = open('123','r+')
f.readline()
f.seek(-1,1)  #定位到\n前f.write('hello')
f.close()

结果:

123
hello
789

没有在第一行写反到第二行了,这是因为原来的格局已定了,要想实现可以这样:

f = open('123','r+')
g = open('1234','w')
line = f.readline()
line = line[:-1] + ' hello\n'g.write()
g.write(f.readline())
g.write(f.readline())
f.close()
g.close()

其中用到了几个技巧:

1. 去除最后的回车键‘\n’

 line = f.readline()
 line = line[:-1]

2.  字符串相加:

line += ' hello'




f = open()             line = f.readline()              line:
     line,                         line = f.readline()

f.close()


也可以写成以下更简洁的形式

 line  open():
     line,



1. 最基本的读文件方法:
?
 
file = open()
 
 1:
    line = file.readline()
      line:
        
       一行一行得从文件读数据,显然比较慢;不过很省内存。
  在我的机器上读10M的sample.txt文件,每秒大约读32000行
2. 用fileinput模块
?
 
 fileinput
 
 line  fileinput.input():
    
  写法简单一些,不过测试以后发现每秒只能读13000行数据,效率比上一种方法慢了两倍多……
3. 带缓存的文件读取
?
 
file = open()
 
 1:
    lines = file.readlines(100000)
      lines:
        
     line  lines:
           这个方法真的更好吗?事实证明,用同样的数据测试,它每秒可以读96900行数据!效率是第一种方法的3倍,第二种方法的7倍!
————————————————————————————————————————————————————————————
  在Python 2.2以后,我们可以直接对一个file对象使用for循环读每行数据:
?
 
file = open()
 
 line  file:
       而在Python 2.1里,你只能用xreadlines迭代器来实现:
?
 
file = open()
 
 line  file.xreadlines():





#!/usr/bin/env pythonimport osfor tmpdir in('/tmp','D:/PythonLearn/temp'):    if os.path.isdir(tmpdir):     # os.path.isdir  指定路径是否存在且为一个目录
        break
    else:        print 'no temp directory availiable'
        tmpdir = ''
        if tmpdir:
    os.chdir(tmpdir)          #os.chdir() 改变当前工作目录
    cwd = os.getcwd()         #os.getcwd() 返回当前工作目录
    print '*** current temporary directory'
    print cwd    print '*** creating example directory...'
    os.mkdir('example')      #os.mkdir() 创建目录
    os.chdir('example')      #os.chdir() 改变当前工作目录
    cwd = os.getcwd()    print '*** new working directory: '
    print cwd    print '*** original directory listing: '
    print os.listdir(cwd)     #os.listdir   列出指定目录文件
    print '*** creating test file...'
    fobj = open('test','w')
    fobj.write('foo\n')
    fobj.write('bar\n')
    fobj.close()    print '*** updated directory listing: '
    print os.listdir(cwd)  #os.listdir()  列出指定目录文件

    print "*** renameing 'test' to 'filetest.txt'"
    os.rename('test','filetest.txt')   #
    os.rename 重命名文件
    print '*** updated directory listing: '
    print os.listdir(cwd)

    path = os.path.join(cwd,os.listdir(cwd)[0])  #   
    os.path.join() 将分离的各部分组合成一个路径
    print '*** full file pathname'
    print path    print '***(pathname,basename==)'
    print os.path.split(path)   # 
    os.path.split()  返回(dirname(),basename())元组
    print '***(filename,extenion)=='
    print os.path.splitext(os.path.basename(path))  # 
    os.path.splitext() 返回(filename,extension)元组   
    os.path.basename()去掉目录返回文件名

    print '*** diaplaying file contents:'
    fobj = open(path)    for eachLine in fobj:        print eachLine,
    fobj.close()    print '*** deleting test file'
    os.remove(path)  #删除文件
    print '*** updated directory listing:'
    print os.listdir(cwd)
    os.chdir(os.pardir)    print '*** deleting test drectory'
    os.rmdir('example')    print '***DONE'



f = open('D:/PythonLearn/vvgtest','w+')
f.tell()    # 0
f.write('test line l\n')      #加入一个长为12的字符串[0-11]
f.tell()    # 12
f.write('test line 2\n')      #加入一个长为12的字符串[12-23]
f.tell()    # 告诉我当前位置  24f.seek(-12,1)                 #向后移12个字节
f.tell()    # 12f.readline()                  # 'test line 2'
f.seek(0,0)                   # 回到最开始
f.readline()                  # 'test line 1'
f.close()



文件对象方法

文件对象方法 操作
file.close() 关闭文件
file.fileno()

返回文件的描述符(file descriptor,FD,整型值)

file.flush()   刷新文件内部缓冲区
file.isatty() 判断file是否是一个类tty设备
file.next() 返回文件的下一行
file.read(siez=-1) 从文件读取size个字节,未给定size或给定负值时,读取剩余的所有字节
file.readline(size=-1) 从文件读取并返回一行,或返回最大size个字符
file.readlines(sizhint=0) 读取文件的所有航并作为一个列表放回,包含所有的行结束符
file.xreadlines() 用于迭代,可以替换readlines()的一个更高效的方法
file.seek(off,whence=0) 在文件中移动文件指针,冲whence(0代表文件开始,1代表当前位置,2代表文件末尾)便宜off字节
file.tell() 返回当前在文件中的位置
file.write(str) 向文件写入字符串
file.writelines(seq)

向文件写入字符串序列seq;seq应该是一个返回字符串的可迭代对象

 9.4 文件内建属性 

       file.name       返回文件名(包含路径)

       file.mode       返回文件打开模式

       file.closed      返回文件是否已经关闭

       file.encoding   返回文件的编码

标准文件:

      python中可以通过sys模块访问文件的句柄,导入sys模块后可以使sys.stdin,sysl.stdout,sys.stderr访问。print语句输出到sys.stdout;内建raw_input()通常从sys.stdin接受输入。

 

import os
filename = raw_input('Enter file name:')
fobj = open(filename,'w')while True:
    aLine = raw_input('Enter a line("." to quit):')    
    if aLine != ".":
        fobj.write('%s%s' % (aLine,os.linesep))    
        else:        
        breakfobj.close()

读取方法:  

   read()  方法用来直接读取字节到字符串中, 不带参数表示全部读取,参数表示读取多少个字节

   readline()   方法读取打开文件的一行,如果提供参数表示读取字节数,默认参数是-1,代表行的结尾

   readlines()  方法会读取所有(剩余的)行然后把他们作为一个字符串列表返回。可选参数代表返回的最大字节大小。

输出方法:

     write()  方法表示写入到文件中去

     writelines()   方法是针对列表的操作,接受一个字符串列表作为参数,写入文件。行结束符不会自动加入。

核心笔记: 使用输入方法read() 或者 readlines() 从文件中读取行时,python并不会删除行结尾符。   

文件内移动:

     seek()  方法,移动文件指针到不同的位置。

      tell()  显示文件当前指针的位置。

 r     以读方式打开

            w    以写方式打开(清空),文件不存在时创建新文件

            a    以追加的模式打开,从文件末尾开始,必要时创建新文件

            r+  以读写模式打开              w+  以读写模式打开              a+  以读写模式打开 

            rb  以二进制读模式打开         wb  以二进制写模式打开         ab  以二进制追加模式打开

            rb+ 以二进制读写模式打开     wb+ 以二进制读写模式打开     ab+  以二进制读写模式打开

file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','a')
 file.write('这是追加的内容!!!!!!!!!!!!!!!!!!!!!!!!!')
 file.close()
 file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','w')
 file.write('这是重写的内容,会清除以前的数据!!!!!!!!!!!!!!!!!!!!!!!!!')
 file.close()
 file = open('C:/Users/Administrator/Desktop/Python/testpy.txt','r')
 readlines = file.readlines()









本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1631746,如需转载请自行联系原作者
目录
相关文章
|
21天前
|
Python
【python】python跨文件使用全局变量
【python】python跨文件使用全局变量
|
29天前
|
监控 数据处理 索引
使用Python批量实现文件夹下所有Excel文件的第二张表合并
使用Python和pandas批量合并文件夹中所有Excel文件的第二张表,通过os库遍历文件,pandas的read_excel读取表,concat函数合并数据。主要步骤包括:1) 遍历获取Excel文件,2) 读取第二张表,3) 合并所有表格,最后将结果保存为新的Excel文件。注意文件路径、表格结构一致性及异常处理。可扩展为动态指定合并表、优化性能、日志记录等功能。适合数据处理初学者提升自动化处理技能。
22 1
|
5天前
|
存储 Python
用Python实现批量下载文件——代理ip排除万难
用Python实现批量下载文件——代理ip排除万难
|
5天前
|
JSON 关系型数据库 数据库
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
30 0
|
5天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
11 0
|
5天前
|
数据安全/隐私保护 Python
Python文件与目录操作:面试中的高频考点
【4月更文挑战第15天】本文介绍了Python文件和目录操作的面试重点,包括文件的读写、目录遍历及权限管理。强调了文件关闭、异常处理、特殊文件判断以及权限位和权限字符串的理解。提供了代码示例,如读写文件、遍历目录和更改文件权限,帮助读者在面试中表现出色。掌握这些技能将对编程求职之路大有裨益。
17 0
|
7天前
|
存储 监控 开发工具
对象存储OSS产品常见问题之python sdk中的append_object方法支持追加上传xls文件如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
38 9
|
21天前
|
人工智能 机器人 测试技术
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
【Python】Python迭代器与生成器的区别(详细讲解)
|
21天前
|
C++ Python
【C++/Python】C++调用python文件
【C++/Python】C++调用python文件
|
22天前
|
JSON 数据处理 数据格式
Python中的文件读写操作详解
【4月更文挑战第2天】在Python中,文件读写操作是数据处理和程序开发的重要部分。通过文件,我们可以将信息持久化地保存在磁盘上,并在需要时读取和使用这些数据。Python提供了丰富的内置函数和模块,使得文件读写变得简单而高效。本文将详细介绍Python中文件读写的基本操作和常用方法。