我正在嘗試創建python腳本來存檔和壓縮datewise tar文件中的一年前數據。腳本還生成存檔文件的日誌文件。我在linux上使用python 2.6。tarfile.open每次覆蓋該文件
這裏是我的代碼:
for search_date in dd_list:
tar_file = "/files/yearly_archive/nas_archive_" + search_date + ".tgz"
mytar = tarfile.open(tar_file,"w:gz")
log_file = "/files/yearly_archive/archive_log_" + search_date
fcount = 0
#print tar_file
#print log_file
f = open(log_file,'ab+')
for f_name, d_date in date_file_dict.iteritems():
if d_date == search_date:
#print f_name
fcount += 1
mytar.add(f_name)
f.write(f_name + '\n')
date_occur_dict[search_date] = fcount
mytar.close()
f.close()
這裏登錄,如果它存在,但tar文件被覆蓋掉了每次當我運行該腳本文件得到追加。有沒有一種方法可以確保tar文件被附加,如果它存在,否則會被創建?
編輯:
我試圖爲ungzipping和添加添加代碼,但它無法正常工作。
for search_date in dd_list:
tar_file = "/files/yearly_archive/nas_archive_" + search_date + ".tgz"
zip = 1
try:
with open(tar_file,'ab+'):
import gzip
d_tar = gzip.open(tar_file,'wb')
zip = 0
except IOError:
print "Creating new tar file"
if zip == 1:
mytar = tarfile.open(tar_file,"w:gz")
else:
mytar = tarfile.open(d_tar,"w")
log_file = "/files/yearly_archive/archive_log_" + search_date
fcount = 0
#print tar_file
#print log_file
f = open(log_file,'ab+')
for f_name, d_date in date_file_dict.iteritems():
if d_date == search_date:
#print f_name
fcount += 1
mytar.add(f_name)
f.write(f_name + '\n')
date_occur_dict[search_date] = fcount
mytar.close()
f.close()
我收到以下錯誤:
Traceback (most recent call last):
File "sort_archive.py", line 63, in <module>
mytar = tarfile.open(d_tar,"w")
File "/usr/lib64/python2.6/tarfile.py", line 1687, in open
return cls.taropen(name, mode, fileobj, **kwargs)
File "/usr/lib64/python2.6/tarfile.py", line 1697, in taropen
return cls(name, mode, fileobj, **kwargs)
File "/usr/lib64/python2.6/tarfile.py", line 1518, in __init__
fileobj = bltn_open(name, self._mode)
TypeError: coercing to Unicode: need string or buffer, instance found
你的意思是將文件解壓之前,然後用tarfile.open(tar_file, 「A」)追加tar文件? – user2501825
Ungzipping,但是。 –
我有懷疑ungzipping和追加。當我們用gzip.open打開文件時,文件名會保持不變嗎?如果我用gzip打開後添加文件,它會去tar嗎? – user2501825