文档章节

文件读取与异常

Kerry_Han
 Kerry_Han
发布于 2013/08/30 14:14
字数 1129
阅读 31
收藏 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
粉丝 14
博文 174
码字总数 54257
作品 0
海淀
程序员
私信 提问
sprintboot-learn(三)

全局异常处理 太简单,没有保存示例工程 方式1: 启动,测试结果: Value表示捕捉那些异常,是一个异常组,如果有多个异常,可以用{}括起来。建议都用exception,然后用instenceof判断,或者...

lazy~
10/12
0
0
HDFS读写流程

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

espanol
2015/07/10
0
0
Python基础班每日整理(六)

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

我是小谷粒
07/02
0
0
打造一个简单的TXT文本操作及日志框架

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

殷慈航
07/28
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

没有更多内容

加载失败,请刷新页面

加载更多

eureka多注册中心

eureka分区的深入讲解

miaojiangmin
18分钟前
1
0
RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云

阿里云RAM (Resource Access Management)为客户提供身份与访问控制管理服务。使用RAM,可以轻松创建并管理您的用户(比如雇员、企业开发的应用程序),并控制用户对云资源的访问权限。 对云资...

阿里云官方博客
22分钟前
0
0
Mysql 8.0 | #08004Client does not support authentication protocol requested by server

完整报错 #08004Client does not support authentication protocol requested by server; consider upgrading MySQL client 解决方法 Using the old mysql_native_password works:ALTER ......

云迹
24分钟前
0
0
kylin入门到实战

1.概述 kylin是一款开源的分布式数据分析工具,基于hadoop之上的sql查询接口,能支持超大规模的数据分析。响应时间在亚秒级别,其核心是预计算,计算结果存放在hbase中。 2.特性 可扩展超快O...

hblt-j
26分钟前
0
0
vagrant mac 安装和使用

varant 在mac上使用起来非常的方便,具体的下载步骤可以看这里https://segmentfault.com/a/1190000000264347 这里主要是记录一下配置文件 # -*- mode: ruby -*- # vi: set ft=ruby : # All V...

一千零一夜个为什么
27分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部