我知道這個問題的其他解決方案,such as using with open as
,但首先我想了解爲什麼我的代碼是或不是一個好的解決方案。打開多個文件,幫助函數
我想打開兩個CSV文件,一個用於讀取,一個用於寫入。只有在兩個文件都成功打開的情況下,腳本纔會繼續。我的代碼似乎完成了,但我想知道幾件事情:
- 什麼是最Python的方法來完成這個,爲什麼?
- 從輔助函數中退出腳本是否是不好的做法?
原始代碼:
input_file = 'in_file.csv'
output_file = 'out_file.csv'
def open_file(file, mode):
try:
fp = open(file, mode)
except IOError as e:
print "Error: cannot open {0}".format(file)
if e.errno == errno.EACCES:
print "\tPermission denied."
print "\tError message: {0}".format(e)
sys.exit()
# Not a permission error.
print "\tDoes file exist?"
print "\tError message: {0}".format(e)
sys.exit()
else:
return fp
def main():
# Open files in binary read/write mode for platform independence.
out_csv = open_file(output_file, 'wb')
in_csv = open_file(input_file, 'rb')
# Do stuff with the files
#
# with out_csv:
#
# writer = csv.writer(out_csv, delimiter='\t')
#
# with in_csv:
#
# reader = csv.reader(in_csv, delimiter='\t')
# for row in reader:
if __name__ == '__main__':
main()
編輯:使用Python 2.7.2
編輯:守則草案:
input_file = 'in_file.csv'
output_file = 'out_file.csv'
def main():
try:
with open(input_file, 'rb') as in_csv, open(output_file , 'wb') as out_csv:
writer = csv.writer(out_csv, delimiter='\t')
reader = csv.reader(in_csv, delimiter='\t')
for row in reader:
# continue processing
# many lines of code...
except IOError as e:
print "Error: cannot open {0}".format(file)
if e.errno == errno.EACCES:
print "\tPermission denied."
print "\tError message: {0}".format(e)
sys.exit()
# Not a permission error.
print "\tDoes file exist?"
print "\tError message: {0}".format(e)
sys.exit()
if __name__ == '__main__':
main()
我的代碼草案感覺有點臃腫在try語句中(想象100個額外的代碼行) 。有更好的方法嗎?
這也許應該去上codereview.statckoverflow.com –
@Joran比斯利:感謝,從現在開始將會牢記這一點。 –