文档章节

文件读取与异常

Kerry_Han
 Kerry_Han
发布于 2013/08/30 14:14
字数 1129
阅读 29
收藏 0
点赞 0
评论 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
博文 164
码字总数 54257
作品 0
海淀
程序员
HDFS读写流程

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

espanol ⋅ 2015/07/10 ⋅ 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 ⋅ 3

六Python异常和文件处理(一)

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

dkz ⋅ 2013/02/22 ⋅ 0

Java读写CSV文件

CSV文件简介 逗号分隔型取值格式(英文全称为Comma Separated Values,简称CSV),是一种纯文本格式,用来存储数据。在CSV中,数据的字段由逗号分开,程序通过读取文件重新创建正确的字段,方...

黑菜妞妞 ⋅ 2011/08/04 ⋅ 3

怎样合理处理JAVA异常

做项目开发,一直有个问题,java异常的处理。有一个Swing的项目,业务代码涉及到文件操作和报文操作,其中的IOException的处理却让我感觉很困惑。 文件操作方面,我要读取配置文件,而无论是...

倚天必出 ⋅ 2014/02/27 ⋅ 1

Java IO流(二)

IO流常用基类 字节流的抽象基类: 字符流的抽象基类: 注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀的。例如,InputStream的子类——FileInputStream,Reader的子类—...

yerenyuan_pku ⋅ 2017/10/14 ⋅ 0

python __enter__ 与 __exit__的作用,以及与 with 语句的关系

With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文...

_周小董 ⋅ 2017/12/16 ⋅ 0

异常--python异常处理

----python 异常处理------------------------------------------------------------------------------DB API中定义了一些数据库操作的错误及异常Warning 当有严重警告时触发,例如插入数据...

liapple6 ⋅ 2017/12/26 ⋅ 0

哪里出错了?帮忙看下 谢谢

import java.io.; import java.util.; public class TextTa2 { public static void main(String[] args) { we(); rd(); } private static void rd( ) { //定义一个读取字符的类rd FileReader......

林俊仁 ⋅ 2012/05/29 ⋅ 7

优雅的处理Android崩溃(二)

转载请注明出处:http://blog.csdn.net/w525721508/article/details/77328754 写在前面 上一篇博客中已经介绍了怎么通过UncaughtExceptionHandler接口实现全局异常的抓取,以及崩溃日志的保存...

咖喱配胡椒 ⋅ 2017/08/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 这么好的姑娘都不要了啊

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @TigaPile :分享曾惜的单曲《讲真的》 《讲真的》- 曾惜 手机党少年们想听歌,请使劲儿戳(这里) @首席搬砖工程师 :怎样约女孩子出来吃饭,...

小小编辑 ⋅ 26分钟前 ⋅ 1

Jenkins实践3 之脚本

#!/bin/sh# export PROJ_PATH=项目路径# export TOMCAT_PATH=tomcat路径killTomcat(){pid=`ps -ef | grep tomcat | grep java|awk '{print $2}'`echo "tom...

晨猫 ⋅ 今天 ⋅ 0

Spring Bean的生命周期

前言 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解。 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: Spring 只帮我们管理单例模...

素雷 ⋅ 今天 ⋅ 0

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 今天 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 今天 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部