文档章节

文件读取与异常

Kerry_Han
 Kerry_Han
发布于 2013/08/30 14:14
字数 1129
阅读 29
收藏 0

1、文件读取和写入

  shell 主要利用管道命令读取和写入文件,python主要是利用open函数,write函数完成


  • import os

  • data=open(finename)

  • print(data.readline());

  • data.close()


通过open打开文件,得到文件对象,通过for循环输出每行,如下代码所示:

[nxuser@PSjamsBond-0-0-0 ~]$ vi readfile.py
#!/bin/python
import os
data=open("readme.txt")
for line in data:
  print(line)
data.close()

输出如下:为什么间隔那么大???

[nxuser@PSjamsBond-0-0-0 ~]$ python readfile.py 

aaa


bbb


ccc


ddddddddd


Shell读取文件如下,利用管道命令作为输入:

[nxuser@PSjamsBond-0-0-0 ~]$ vi readfile.sh
#!/bin/bash

cat readme.txt| 
while read line
  do  

    echo $line

  done
  
[nxuser@PSjamsBond-0-0-0 ~]$ ./readfile.sh 
aaa
bbb
ccc
ddddddddd

python读取文件后,可以获取文件的更多信息,如名称,扩展名, 访问模式等:

[nxuser@PSjamsBond-0-0-0 ~]$ vi readfile.py
#!/bin/python
import os

filename=raw_input("please input filename:");
print(filename)
#access mode , is buffer
fo=open(filename,"r")
for line in fo:
  print(line)
#
print("the file name is: "),fo.name
print("the file mode is:"),fo.mode

fo.close()

python写入文件,利用write函数,但是文件的模式应该为可写入的,比如r+,w+,wb等

#!/bin/python
import os

filename=raw_input("please input filename:");
print"the input file name is",(filename)
#access mode , is buffer
fo=open(filename,"r+")
for line in fo:
  print(line)
#
print("the file name is: "),fo.name
print("the file mode is:"),fo.mode

# write file

fo.write("python is greate!!!")


fo.close()

shell写入文件通过管道命令实现:

通过两个管道命令就可以实现:

1.  >  符号表示将信息写入文件中

2.    >> 符号表示在已有的文件中添加信息

#!/bin/bash

read -p "please input file name:"  filename

cat $filename|
while read line
  do

    echo $line

  done

echo "shell is powerful" >>$filename

read函数读取指定字节数,不指定读取全部,此函数注意指针的位置,如果循环输出后进行读取,内容肯定为空,因为指针位于文件末尾,此时需要从头开始,利用seek函数,可以利用tell查询指针位置

#!/bin/python
import os

filename=raw_input("please input filename:");
print"the input file name is",(filename)

#access mode , is buffer
fo=open(filename,"r+")

for line in fo:
  print(line)
#
print("the file name is: "),fo.name
print("the file mode is:"),fo.mode

# write file

#fo.write("python is greate!!!")


#read function
# the position is at the end of file, so the read result is empty
# Need to reset the position to zero

str=fo.read(20)
print("the result of read function is :"),str,fo.tell()

fo.seek(0,0)

print("the result of read function is :"),str,fo.tell()


str=fo.read(20)

print("the result of read function is :"),str,fo.tell()

fo.close()

输出如下

[nxuser@PSjamsBond-0-0-0 ~]$ python readfile.py 
please input filename:readme.txt
the input file name is readme.txt
aaa

bbb

ccc

ddddddddd

python is greate!!!shell is powerful

python is greate!!!python is greate!!!
the file name is:  readme.txt
the file mode is: r+
the result of read function is :  97
the result of read function is :  0
the result of read function is : aaa
bbb
ccc
dddddddd 20


2. 文件及目录操作

通过os模块实现文件重命名,删除,目录等操作,新建由open函数完成。

[nxuser@PSjamsBond-0-0-0 ~]$ vi fileanddirectory.py
#!/bin/python

import os

fo=open("testfile.txt","w+")

os.rename("testfile.txt","newtestfile.txt")

os.remove("newtestfile.txt")

#os.mkdir("kerry")


os.chdir("/home/nxuser")

print "the current director is:", os.getcwd()

 

是否存在判断

   os.path.isfile()

   os.path.exists()

#!/bin/python

import os

fo=open("testfile.txt","w+")

isExist=os.path.isfile("testfile.txt")

print("the vaule of isExist is :"),isExist

os.rename("testfile.txt","newtestfile.txt")

os.remove("newtestfile.txt")

try:
 os.mkdir("kerry")
except OSError:
 pass

dirExist=os.path.exists("./kerry")
print("the value of dirExist is:"),dirExist

os.chdir("/home/nxuser")

print "the current director is:", os.getcwd()
  • File 对象方法: file对象提供了操作文件的一系列方法。

  • OS 对象方法: 提供了处理文件及目录的一系列方法。


3. 键盘输入

shell键盘输入利用read,  -p参数指定提示语,  

read  -p "please input"  filename

[nxuser@PSjamsBond-0-0-0 ~]$ vi readfile.sh
#!/bin/bash

read -p "please input file name:"  filename

cat $filename|  
while read line
  do

    echo $line

  done

python利用raw_input 和input函数

[nxuser@PSjamsBond-0-0-0 ~]$ vi readfile.py
#!/bin/python
import os

filename=raw_input("please input filename:");
print(filename)
data=open(filename)
for line in data:
  print(line)
data.close()

此处利用input报错,不知为何????

使用input和raw_input都可以读取控制台的输入,input()只能接受int,float或由它们组成的表达式,并且返回运算结果

详见此文:http://blog.csdn.net/wusuopubupt/article/details/23680491

4. 异常管理

try:

 你的代码逻辑

except:

   异常处理逻辑


try:

 你的代码逻辑

except IOError:

   异常处理逻辑


#!/bin/python
import os

filename=raw_input("please input filename:");
print"the input file name is",(filename)

#access mode , is buffer
try:
 fo=open(filename,"r+")
except IOError:
   print("can not find file")
else:
   print("this is in else ")
finally:

   print("this is in finally ")

raise TypeError("my type error")


输出如下:

[nxuser@PSjamsBond-0-0-0 ~]$ python readfile.py 

please input filename:aaa

the input file name is aaa

can not find file

this is in finally 

Traceback (most recent call last):

  File "readfile.py", line 18, in <module>

    raise TypeError("my type error") 

TypeError: my type error


shell中除了退出码判断执行情况外,利用trap命令捕获异常,此处不详细介绍



© 著作权归作者所有

共有 人打赏支持
Kerry_Han
粉丝 13
博文 174
码字总数 54257
作品 0
海淀
程序员
打造一个简单的TXT文本操作及日志框架

首先先介绍一下这个项目,该项目实现了文本写入及读取,日志写入指定文件夹或默认文件夹,日志数量控制,单个日志大小控制,通过约定的参数让用户可以用更少的代码解决问题。 1.读取文本文件...

殷慈航
07/28
0
0
Python基础班每日整理(六)

03面向对象day03 类属性和实例属性的概念。 类属性是给类对象(类是一个特殊的对象)中定义的属性,通常用来记录与这个类相关的特征,类属性不会用于记录具体对象的特征。类属性的定义是在初始...

我是小谷粒
07/02
0
0
HDFS读写流程

数据读取流程: 客户端访问NameNode,告知需要读取的文件 客户身份确认 检查文件的所有者及其设定的访问权限,如果文件确实存在,而且用户对这个有访问权限。NameNode告知客户端文件的第一个...

espanol
2015/07/10
0
0
六Python异常和文件处理(一)

1.异常处理 和许多面向对象语言一样,Python具有异常处理,通过使用try……except快来实现。异常在Python中无处不在,Python自己会在许多不同的情况下引发它们。 使用不存在的字典关键字将引...

dkz
2013/02/22
0
0
python:文件的读取、创建、追加、删除、清空

一、用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 >>>for i in range(0,10):f.write(str(i)+'n') . . . >>> f.cl......

青春无极限
2014/10/16
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
0
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0
SSE(Server Send Event 服务端发送事件)

package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframe......

Canaan_
今天
0
0
jvm调优

1.jvm运行模式 client模式:启动快,占用内存少,jit编译器生成代码的速度也更快. server模式:主要优势在于代码优化功能,这个功能对于服务器应用而言尤其重要. tiered server模式:结合了client与...

Funcy1122
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部