天天看點

[PYTHON]簡單的檔案增删改查處理

快一個月木有更新了,在這段時間内,部落客除了忙工作外,就一直在研究python程式設計,據圈内朋友閑聊,python應該是未來一個運維攻城獅除了shell以外必備的LINUX腳本語言,是以就硬着頭皮,按照老男孩的python視訊講座,把自己的研究成果貼出來,目前還沒學完,期待老男孩的講座更加給力些。

PS: 1.老男孩的python視訊講座很不錯,希望能繼續免費下去。。。

2.部落客程式設計很爛,有什麼地方有問題,還請多多指教。。。

3.最近買了本PYTHON核心程式設計,啃書ing。。。

系統環境: Ubuntu 12.10 server 64-bit

PYTHON: Python 2.7.3

# mkdir python

# vi contact_list.txt

-------------------------

1 zhangsan IT 0001

2 lisi IT 0002

3 wangwu HR 0003

4 zhaoliu OP 0004

# vi staff_list.py

----------------------------------------------------

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

<code>#!/usr/bin/env python</code>

<code>#encoding:utf-8 # 支援中文輸入</code>

<code>import</code> <code>sys</code>

<code>import</code> <code>getpass</code>

<code>import</code> <code>shutil</code>

<code>import</code> <code>commands</code>

<code>import</code> <code>time</code>

<code>import</code> <code>fileinput</code>

<code>staff_list </code><code>=</code> <code>'contact_list.txt'</code>

<code># 參數配置</code>

<code>user </code><code>=</code> <code>'admin'</code>

<code>passwd </code><code>=</code> <code>'123456'</code>

<code>s </code><code>=</code> <code>file</code><code>(staff_list)</code>

<code>ss </code><code>=</code> <code>s.readlines()</code>

<code>a </code><code>=</code> <code>file</code><code>(staff_list,</code><code>'a'</code><code>)</code>

<code>counter </code><code>=</code> <code>0</code>

<code>_counter </code><code>=</code> <code>0</code>

<code># 認證登陸</code>

<code>while</code> <code>True</code><code>:</code>

<code>  </code><code># 計數器,超過3次強制退出</code>

<code>  </code><code>if</code> <code>counter &lt;</code><code>=</code> <code>3</code><code>:</code>

<code>    </code><code># 空使用者名判斷</code>

<code>    </code><code>name </code><code>=</code> <code>raw_input</code><code>(</code><code>"please input your name: "</code><code>).strip()</code>

<code>    </code><code>if</code> <code>len</code><code>(name) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>      </code><code>print</code> <code>"empty name,try again!"</code>

<code>      </code><code>continue</code>

<code>    </code><code># 使用者名密碼判斷,密碼隐藏</code>

<code>    </code><code># pwd =  raw_input("please input your password: ")</code>

<code>    </code><code>pwd </code><code>=</code> <code>getpass.getpass(</code><code>'please input your password:'</code><code>)</code>

<code>    </code><code>if</code> <code>pwd </code><code>=</code><code>=</code> <code>passwd </code><code>and</code> <code>name </code><code>=</code><code>=</code> <code>user:</code>

<code>      </code><code>print</code> <code>"Welcome to login,%s"</code> <code>%</code><code>name</code>

<code>    </code><code>else</code><code>:</code>

<code>      </code><code>print</code> <code>"name or password is not valid,please try again!"</code>

<code>          </code><code>counter </code><code>+</code><code>=</code><code>1</code>

<code>    </code><code>break</code>

<code>  </code><code>else</code><code>:</code>

<code>    </code><code>print</code> <code>"exceeded 3 times user login..exit the script"</code>

<code>    </code><code>sys.exit()</code>

<code># 選擇增删改查</code>

<code>  </code><code>item </code><code>=</code> <code>raw_input</code><code>(</code><code>'''\033[36;1mWelcome to login %s, what do you want to do?</code>

<code>-----------------------</code>

<code>press 'p' for print</code>

<code>press 'a' for add</code>

<code>press 'd' for delete</code>

<code>press 'u' for update</code>

<code>press 's' for select</code>

<code>press 'q' for quit</code>

<code>please make your choise: \033[0m'''</code> <code>%</code> <code>user)</code>

<code>    </code> 

<code>  </code><code># 列印所有</code>

<code>  </code><code>if</code> <code>item </code><code>=</code><code>=</code> <code>'p'</code><code>:</code>

<code>    </code><code>while</code> <code>True</code><code>:</code>

<code>      </code><code>user_select </code><code>=</code> <code>open</code><code>(staff_list,</code><code>'r'</code><code>)</code>

<code>      </code><code>s_ </code><code>=</code> <code>user_select.read()   </code>

<code>      </code><code>print</code> <code>'                          '</code>

<code>      </code><code>print</code> <code>'\033[32;1mThe content of the file\033[0m '</code>

<code>      </code><code>print</code> <code>'\033[32;1m--------------------------\033[0m '</code>

<code>      </code><code>print</code> <code>s_</code>

<code>      </code><code>break</code>

<code>      </code> 

<code>  </code><code># 增加</code>

<code>  </code><code>elif</code> <code>item </code><code>=</code><code>=</code> <code>'a'</code><code>:</code>

<code>      </code><code>user_add_num </code><code>=</code> <code>raw_input</code><code>((</code><code>"\033[32;1mplease input your number: \033[0m "</code><code>).strip())</code>

<code>      </code><code>user_add_name </code><code>=</code> <code>raw_input</code><code>((</code><code>"\033[32;1mplease input your name: \033[0m "</code><code>).strip())</code>

<code>      </code><code>user_add_dept </code><code>=</code> <code>raw_input</code><code>((</code><code>"\033[32;1mplease input your department: \033[0m "</code><code>).strip())</code>

<code>      </code><code>user_add_id </code><code>=</code> <code>raw_input</code><code>((</code><code>"\033[32;1mplease input your id: \033[0m "</code><code>).strip())</code>

<code>      </code><code>user_item </code><code>=</code> <code>'%s\t%s\t%s\t%s'</code> <code>%</code><code>(user_add_num,user_add_name,user_add_dept,user_add_id)</code>

<code>      </code><code>a.write(</code><code>"\n%s"</code> <code>%</code><code>user_item)</code>

<code>      </code><code>a.flush()</code>

<code>      </code><code>print</code> <code>"\033[32;1mAdd item:\033[0m"</code>

<code>      </code><code>print</code> <code>"\033[32;1m------------------\033[0m"</code>

<code>      </code><code>print</code> <code>user_item</code>

<code>      </code><code>print</code> <code>"\033[32;1mAdded successful!\033[0m"</code>

<code>        </code> 

<code>      </code><code># 删除空行</code>

<code>      </code><code>del_blank_in </code><code>=</code> <code>open</code><code>(</code><code>'contact_list.txt'</code><code>,</code><code>'r'</code><code>)</code>

<code>      </code><code>del_blank_out </code><code>=</code> <code>open</code><code>(</code><code>'contact_list_new.txt'</code><code>,</code><code>'w'</code><code>)</code>

<code>      </code><code>lines </code><code>=</code> <code>del_blank_in.readlines()</code>

<code>      </code><code>for</code> <code>blank </code><code>in</code> <code>lines:</code>

<code>        </code><code>if</code> <code>blank.split():</code>

<code>          </code><code>del_blank_out.writelines(blank)</code>

<code>      </code><code>del_blank_in.close()</code>

<code>      </code><code>del_blank_out.close()</code>

<code>      </code><code># 覆寫原檔案</code>

<code>      </code><code>shutil.move(</code><code>'contact_list_new.txt'</code><code>,</code><code>'contact_list.txt'</code><code>)</code>

<code>      </code><code>user_add_choise </code><code>=</code> <code>raw_input</code><code>(</code><code>'press Q for quit or press any key to continue: '</code><code>)</code>

<code>      </code><code>if</code> <code>user_add_choise </code><code>=</code><code>=</code> <code>'Q'</code><code>:</code>

<code>          </code><code>print</code> <code>'bye!'</code>

<code>          </code><code>break</code>

<code>  </code><code># 删除</code>

<code>  </code><code>elif</code> <code>item </code><code>=</code><code>=</code> <code>'d'</code><code>:</code>

<code>      </code><code>user_del_input </code><code>=</code> <code>raw_input</code><code>(</code><code>"please input sth to delete: "</code><code>).strip()</code>

<code>      </code><code>if</code> <code>len</code><code>(user_del_input) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>        </code><code>print</code> <code>"empty input,try again!"</code>

<code>      </code><code>else</code><code>:</code>

<code>        </code><code># 輸入值與源檔案比對,有則丢棄,沒有則添加到新檔案,最後新檔案覆寫源檔案,實作删除功能</code>

<code>        </code><code>with </code><code>open</code><code>(</code><code>'contact_list.txt'</code><code>,</code><code>'r'</code><code>) as ff:</code>

<code>          </code><code>with </code><code>open</code><code>(</code><code>'contact_list.txt.new'</code><code>,</code><code>'w'</code><code>) as gg:</code>

<code>            </code><code>for</code> <code>line </code><code>in</code> <code>ff.readlines():</code>

<code>              </code><code>if</code> <code>user_del_input </code><code>not</code> <code>in</code> <code>line:</code>

<code>                </code><code>gg.write(line)</code>

<code>          </code><code>if</code> <code>user_del_input </code><code>in</code> <code>line:</code>

<code>        </code><code>print</code> <code>"\033[32;1mDelete item:\033[0m"</code>

<code>        </code><code>print</code> <code>"\033[32;1m------------------\033[0m"</code>

<code>        </code><code>print</code> <code>" %s "</code> <code>%</code><code>line</code>

<code>        </code><code>_counter </code><code>+</code><code>=</code> <code>1</code> <code># 計數器,判斷輸入值命中次數</code>

<code>        </code><code>print</code> <code>"\033[32;1mDeleted successful!\033[0m"</code>

<code>        </code><code>if</code> <code>_counter </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>               </code><code>print</code> <code>'nothing delete!'</code>

<code>        </code><code>shutil.move(</code><code>'contact_list.txt.new'</code><code>,</code><code>'contact_list.txt'</code><code>)</code>

<code>        </code><code># 退出删除</code>

<code>        </code><code>user_del_input_quit </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mpress Q for quit or press any key to continue? \033[0m"</code><code>).strip()</code>

<code>        </code><code>if</code> <code>user_del_input_quit </code><code>=</code><code>=</code> <code>'Q'</code><code>:</code>

<code>            </code><code>break</code>    

<code>  </code><code># 查詢</code>

<code>  </code><code>elif</code> <code>item </code><code>=</code><code>=</code> <code>'s'</code><code>:</code>

<code>      </code><code>match_yes </code><code>=</code> <code>0</code>

<code>      </code><code>#輸入判斷,忽略空格輸入,加入顔色</code>

<code>      </code><code>user_select_input </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mplease input sth to search:\033[0m "</code><code>).strip()</code>

<code>      </code><code>contact_file </code><code>=</code> <code>file</code> <code>(staff_list)</code>

<code>      </code><code>if</code> <code>len</code><code>(user_select_input) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>        </code><code>while</code> <code>True</code><code>:</code>

<code>      </code><code>line </code><code>=</code> <code>contact_file.readline()</code>

<code>          </code><code>if</code> <code>len</code><code>(line) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>      </code><code>if</code> <code>user_select_input </code><code>in</code> <code>line:</code>

<code>          </code><code>match_yes </code><code>=</code> <code>1</code>

<code>          </code><code>print</code> <code>line</code>

<code>          </code><code>pass</code>

<code>        </code><code>if</code> <code>match_yes </code><code>=</code><code>=</code> <code>0</code> <code>:</code>

<code>          </code><code>print</code> <code>"No match item found"</code>

<code>      </code><code># 退出查詢</code>

<code>        </code><code>user_select_input_quit </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mpress Q for quit or press any key to continue? \033[0m"</code><code>).strip()</code>

<code>        </code><code>if</code> <code>user_select_input_quit </code><code>=</code><code>=</code> <code>'Q'</code><code>:</code>

<code>   </code> 

<code>  </code><code># 修改</code>

<code>  </code><code>elif</code> <code>item </code><code>=</code><code>=</code> <code>'u'</code><code>:</code>

<code>      </code><code># 輸入為空以及比對查詢内容判斷</code>

<code>      </code><code>user_update_input_from </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mplease search sth to update: \033[0m"</code><code>).strip()</code>

<code>      </code><code>update_match </code><code>=</code> <code>0</code>

<code>      </code><code>update_file </code><code>=</code> <code>file</code><code>(staff_list).readlines()</code>

<code>      </code><code>for</code> <code>n_ </code><code>in</code> <code>range</code><code>(</code><code>len</code><code>(update_file)):</code>

<code>    </code><code>if</code> <code>user_update_input_from </code><code>in</code> <code>update_file[n_]:</code>

<code>        </code><code>update_match </code><code>=</code> <code>1</code>

<code>        </code><code>pass</code>

<code>      </code><code>if</code> <code>update_match </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>        </code><code>print</code> <code>"No match item found"</code>

<code>      </code><code>elif</code> <code>len</code><code>(user_update_input_from) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>    </code><code># 将比對到的字元修改為新字元</code>

<code>      </code><code>user_update_input_to </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mupdate %s to what?\033[0m "</code> <code>%</code><code>(user_update_input_from)).strip()</code>

<code>      </code><code>if</code> <code>len</code><code>(user_update_input_to) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>            </code><code>print</code> <code>"empty input,try again!"</code>

<code>        </code><code>for</code> <code>line_ </code><code>in</code> <code>fileinput.</code><code>input</code><code>(staff_list,inplace </code><code>=</code> <code>1</code><code>,backup</code><code>=</code><code>'.bak'</code><code>):</code>

<code>          </code><code>line_ </code><code>=</code> <code>line_.replace(user_update_input_from,user_update_input_to)</code>

<code>          </code><code>print</code> <code>line_</code>

<code>        </code><code># 列印修改字元的行</code>

<code>            </code><code>print</code> <code>"\033[32;1mupdate item:\033[0m"</code>

<code>            </code><code>output_ </code><code>=</code> <code>commands.getoutput(</code><code>"diff contact_list.txt contact_list.txt.bak|grep '^&gt;.*' | sed 's/^&gt;//g'"</code><code>)</code>

<code>        </code><code>print</code> <code>"\033[32;1m---------------------------\033[0m"</code>

<code>            </code><code>print</code> <code>output_</code>

<code>        </code><code>print</code> <code>"\033[32;1mupdate successfully!\033[0m"</code>

<code>            </code><code># 删除空行</code>

<code>            </code><code>del_blank_in </code><code>=</code> <code>open</code><code>(</code><code>'contact_list.txt'</code><code>,</code><code>'r'</code><code>)</code>

<code>            </code><code>del_blank_out </code><code>=</code> <code>open</code><code>(</code><code>'contact_list_new.txt'</code><code>,</code><code>'w'</code><code>)</code>

<code>            </code><code>lines </code><code>=</code> <code>del_blank_in.readlines()</code>

<code>            </code><code>for</code> <code>blank </code><code>in</code> <code>lines:</code>

<code>          </code><code>if</code> <code>blank.split():</code>

<code>            </code><code>del_blank_out.writelines(blank)</code>

<code>            </code><code>del_blank_in.close()</code>

<code>            </code><code>del_blank_out.close()</code>

<code>            </code><code># 覆寫原檔案</code>

<code>            </code><code>shutil.move(</code><code>'contact_list_new.txt'</code><code>,</code><code>'contact_list.txt'</code><code>)</code>

<code>        </code><code>break</code>

<code>    </code><code># 退出更新</code>

<code>    </code><code>user_update_input_quit </code><code>=</code> <code>raw_input</code><code>(</code><code>"\033[32;1mpress Q for quit or press any key to continue? \033[0m"</code><code>).strip()</code>

<code>        </code><code>if</code> <code>user_update_input_quit </code><code>=</code><code>=</code> <code>'Q'</code><code>:</code>

<code>        </code><code>break</code>  

<code>         </code> 

<code>  </code><code># 退出</code>

<code>  </code><code>elif</code> <code>item </code><code>=</code><code>=</code> <code>'q'</code><code>:</code>

<code>    </code><code>print</code> <code>'bye!'</code>

<code>    </code><code>print</code> <code>"\033[31;1mnot a valid key word\033[0m"</code>

<code>    </code><code>time.sleep(</code><code>1</code><code>)</code>

-----------------------------------------------------

     本文轉自 showerlee 51CTO部落格,原文連結:http://blog.51cto.com/showerlee/1308764,如需轉載請自行聯系原作者