Python Day148-154(读取/写入空文件/附加写/异常)

DAY 148 2017.10.28

Python逐行读取

读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以某种方式修改文件中的文本。例如,你可能要遍历一个包含天气数据的文件,并使用天气描述中包含字样sunny的行。在新闻报道中,你可能会查找包含标签<headline> 的行,并按特定的格式设置它。要以每次一行的方式检查文件,可对文件对象使用for 循环。
现在我们读取服务器的口令文件:


filename = '/etc/passwd'
with open(filename) as file_object: 
    for line in file_object:
        print(line)

/etc/passwd

通常在Linux系统中,用户的关键信息被存放在系统的/etc/passwd文件中,系统的每一个合法用户账号对应于该文件中的一行记录,所以直接数passwd文件的行数就可以知道本机有多少个账号了(本机有30个账号)。部分摘录如下:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

每条记录占一行,记录了一个用户帐号的所有信息。每条记录由7个字段组成,并且字段间用六个冒号“:”隔开,其格式如下:

username:password:User ID:Group ID:comment:home directory:shell
注册名:口令:用户标识号:组标识号:用户名:用户主目录:命令解释程序

(1)注册名:用于区分不同的用户。
(2)口令:系统用口令来验证用户的合法性。
(3)用户标识号:UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。
(4)组标识号:这是当前用户的缺省工作组标识。
(5)用户名:包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。
(6)用户主目录:该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。
(7)命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,如/bin/bash。(之后还要提到shell,重点标注一下)

每个字段的具体含义可以看看这篇文章:LINUX用户管理——/etc/passwd文件详解


DAY 149 2017.10.29

Python读取服务器密码文件,并获得shell路径

使用关键字with 时,open() 返回的文件对象只在with 代码块内可用。如果要在with 代码块外访问文件的内容,可在with 代码块内将文件的各行存储在一个列表中,并在with 代码块外使用该列表:你可以立即处理文件的各个部分,也可推迟到程序后面再处理。下面的示例在with 代码块中将文件passwd的各行存储在一个列表中,再在with 代码块外打印它们:




filename = '/etc/passwd'
with open(filename) as file_object: 
    lines = file_object.readlines()
for line in lines: 
    print(line.rstrip()) 
    if ":" in line: 
        print line.split(":")[-1].rstrip()

Shell

命令解释程序(Shell):Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名,如/bin/bash。


restrip()

Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格)
语法及参数:

str.rstrip(chars)
chars——指定删除的字符(默认为空格)

示例:

# -- coding: utf-8 --
str = "     Have a nice day     ";
print str.rstrip();
str = "ccccccWhat's your name?ccccccc";
print str.rstrip('c')

split()

Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串。
语法及参数:

str.split(str="", num=string.count(str))[n]
str——分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num——分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量。
[n]——表示选取第n个分片。

示例:

# -- coding: utf-8 --
str = "www.tutorialspoint.com";
#以'.'为分隔符
print str.split('.')
#以'.'为分隔符,分隔1次
print str.split('.', 1 )
#以'.'为分隔符,分隔2次
print str.split('.', 2 )
#以'.'为分隔符,分隔2次,并取序列为0的项
print str.split('.', 2)[0]
#以'.'为分隔符,分隔2次,并取序列为1的项
print str.split('.', 2)[1]
#以'.'为分隔符,分隔2次,并取序列为2的项
print str.split('.', 2)[2]
#以'.'为分隔符,分隔2次,并取序列为-1的项
print str.split('.', 2)[-1]
#以'.'为分隔符,分隔2次,并取序列为-2的项
print str.split('.', 2)[-2]

DAY 150 2017.10.30

使用python获取并处理系统密码文件的内容

将文件读取到内存中后,就可以以任何方式使用这些数据了。下面以简单的方式使用系统密码文件的值。首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:
读取passwd文件每一行,添加到pi_string并且打印出来,然后打印pi_string长度。可以看到pi_string越来越长。




filename = '/etc/passwd'
with open(filename) as file_object: 
    lines = file_object.readlines() 
    pi_string = '' 
    for line in lines: 
        pi_string += line.rstrip() 
        print(pi_string) 
        print(len(pi_string))

DAY 151 2017.10.31

python向服务器写入空文件

保存数据的最简单的方式之一是将其写入到文件中。通过将输出写入文件,即便关闭包含程序输出的终端窗口,这些输出也依然存在:你可以在程序结束运行后查看这些输出,可与别人分享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。

要将文本写入文件,你在调用open() 时需要提供另一个实参,告诉Python你要写入打开的文件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中,然后调用commands模块执行cat的命令,看我们写成功的文件内容。
当然可以写文件已经很牛了,但没权限的话,python最好写到/tmp目录下以保证能生成文件。


import commands
filename = '/tmp/hack.txt'
with open(filename, 'w') as file_object: 
    file_object.write("I love programming.")
print commands.getstatusoutput("cat /tmp/hack.txt")

DAY 152 2017.11.1

python写入多行

函数write() 不会在你写入的文本末尾添加换行符,因此如果你写入多行时没有指定换行符,文件看起来可能不是你希望的那样:
所以,写入多行需要加入换行符。


import commands
filename = '/tmp/hk.txt'
with open(filename, 'w') as file_object: 
    file_object.write("I love programming.")
commands.getstatusoutput("cat /tmp/hk.txt")

with open(filename,'r') as file_object:
    contents=file_object.read()
    print contents
import commands
filename = '/tmp/hk.txt'
with open(filename, 'w') as file_object:
    file_object.write("I love programming.\n")
    file_object.write("I love creating new games.\n")
commands.getstatusoutput("cat /tmp/hk.txt")

with open(filename,'r') as file_object:
    contents=file_object.read()
    print contents

DAY 153 2017.11.2

python文件附加写导致的迷案

如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式 打开文件。你以附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。如果指定的文件不存在,Python将为你创建一个空文件。 下面来修改程序,在既有文件pp.txt中再添加一些你酷爱编程的原因: main.py



import commands
filename = "./pp.txt"
with open(filename, 'a') as fo: 
    fo.write("I also love finding meaning in large datasets. ") 
    print commands.getstatusoutput("cat ./pp.txt")
    fo.write("I love creating apps that can run in a browser. ")

print commands.getstatusoutput("cat ./pp.txt")

DAY 154 2017.11.3

异常

Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继 续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except 代码块处理的。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except 代码块时,即便出现异常, 程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。(错误堆栈)

处理ZeroDivisionError 异常
使用try-except 代码块

当你认为可能发生了错误时,可编写一个try-except 代码块来处理可能引发的异常。你让Python尝试运行一些代码,并告诉它如果这些代码引发了指定的异常,该怎么办。 处理ZeroDivisionError 异常的try-except 代码块类似于下面这样:


#!/usr/bin/env python2
# -*- coding: utf-8 -*-
try:
       print(5/0)
except  ZeroDivisionError:
       print("You can't divide by zero!")

Markdown实在太好用了,作业一直在做但没有时间整理,周末加油整理好(๑• . •๑)
2017.11.11更新

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容