#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–1. 檔案過濾. 顯示乙個檔案的所有行, 忽略以井號( # )開頭的行.
# 這個字元被用做python, perl, tcl, 等大多指令碼檔案的注釋符號.
# 附加題: 處理不是第乙個字元開頭的注釋.
import os, sys
filename = ""
for filename in os.listdir(os.getcwd()):
if os.path.splitext(filename)[1] == ".py":
break
fobj = open(filename, "r")
print
print '*' * 25
for line in fobj:
if line[0] != '#':
print line,fobj.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–2. 檔案訪問. 提示輸入數字 n 和檔案 f, 然後顯示檔案 f 的前 n 行.
import os
number = int(raw_input("please input the how lines to show: "))
filename = raw_input("please input the file name: ")
print filename
if not os.path.exists(filename):
print "file not exist."
else:
fobj = open(filename, "r")
show_number = 0
for line in fobj:
if show_number > number:
break
print line,
show_number += 1fobj.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–3. 檔案資訊. 提示輸入乙個檔名, 然後顯示這個文字檔案的總行數.
import os
filename = raw_input("please input file name: ")
fobj = open(filename, "r")
print len(lines = fobj.readlines())fobj.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–4. 檔案訪問. 寫乙個逐頁顯示文字檔案的程式. 提示輸入乙個檔名, 每次顯示
# 文字檔案的 25 行, 暫停並向使用者提示"按任意鍵繼續.", 按鍵後繼續執行.
import os
filename = raw_input("please input file name: ")
fobj = open(filename, "r")
show_number = 0
for f in fobj:
print f,
show_number += 1
if show_number % 25 == 0:
# print "any key to continue..."
os.system('pause')fobj.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–6. 檔案比較. 寫乙個比較兩個文字檔案的程式. 如果不同, 給出第乙個不同處的行號和列號.
fobj1 = open("9-6.py", "r")
fobj2 = open("9-3.py", "r")
length = max(len(fobj1.readlines()), len(fobj2.readlines()))
fobj1.seek(0)
fobj2.seek(0)
for linenum in range(0, length):
line1 = fobj1.readline()
line2 = fobj2.readline()
if line1 != line2:
print "diff at", linenum+1
break
else:
if len(fobj1.readlines()) == len(fobj2.readlines()):
print "same"
else:
print length+1
fobj1.close()
fobj2.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–13. 命令列引數
# a) 什麼是命令列引數, 它們有什麼用?
# b) 寫乙個程式, 列印出所有的命令列引數.
import sys
for arg in sys.argv:
print arg
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–15. 複製檔案. 提示輸入兩個檔名(或者使用命令列引數).
# 把第乙個檔案的內容複製到第二個檔案中去.
import sys
def printhelp():
print "useage: ", sys.argv[0], "source target"
if len(sys.argv) != 3:
printhelp()
else:
sourcename = sys.argv[1]
targetname = sys.argv[2]
fsource = open(sourcename, "r")
ftarget = open(targetname, "w")
for line in fsource:
ftarget.write(line)
fsource.close()
ftarget.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9–16. 文字處理. 人們輸入的文字常常超過螢幕的最大寬度. 編寫乙個程式,
# 在乙個文字檔案中查詢長度大於 80 個字元的文字行. 從最接近 80 個
# 字元的單詞斷行, 把剩餘檔案插入到下一行處.
# 程式執行完畢後, 應該沒有超過 80 個字元的文字行了.
fsource = open("x", "r")
ftarget = open("no-80.txt", "w")
for line in fsource:
if len(line)-1 <= 80:
ftarget.write(line)
else:
writeline = line
while len(writeline)-1 > 80:
i = 79
while i >= 0:
if writeline[i] in [' ', ',', ':', ';', '.', '!']:
ftarget.write(writeline[0:i+1] + '\n')
writeline = writeline[i+1:]
break;
i -= 1
ftarget.write(writeline)
fsource.close()
ftarget.close()
#!/usr/bin/python
# -*- coding: utf-8 -*-
# 9.18. 搜尋檔案. 提示輸入乙個位元組值(0 - 255)和乙個檔名.
# 顯示該字元在檔案中出現的次數.
filename = raw_input("please input file name: ")
ch = raw_input("please input the char for find: ")
fobj = open(filename)
count = 0
for line in fobj:
count += line.count(ch)
else:
print count
python核心程式設計第九章答案
9.1 比較簡單 看每一行開頭是不是 是的話,忽略這一行 usr bin env python import os while true inputfile raw input please input the file name if not os.path.exists inputfile pr...
程式設計珠璣第九章
1 記憶體訪問 連續記憶體訪問與跨頁面訪問記憶體的區別 注意在訪問記憶體的時候,要注意記憶體的連續性,如果訪問的記憶體不是連續的,那麼程式的執行速度也會受到極大的影響 例如訪問乙個二維陣列時,先訪問行,再訪問列,能夠減少頁面排程次數,同時cache命中率也相對高些。2 遞迴呼叫巨集時,需要小心,巨集...
第九章 核心同步介紹
1.隨著2.6版核心的出現,linux核心已經發展成搶占式核心,如果不加保護,排程程式可以在任何時刻搶占正在執行的核心程式碼,重新排程其他的程序執行 2.臨界區或者臨界段 訪問和操作共享資料的程式碼段 3.如果兩個執行執行緒 指代的是任何正在執行的程式碼,如乙個在核心執行程序 乙個中斷處理程式或者核...