2013-10-29 39 views
0

請幫我解決這個問題。我的代碼就像下面。我要去讀savefile.txt並寫在另一個文本備份文件['attendance.csv'] 這裏讀寫部分作品完美,但在刪除功能的,給出以下提到的錯誤 感謝如何使用Python,讀取文本文件,如果不存在然後寫入另一個文件並刪除?

def text_files_upload(self, cr, uid, ids, context=None): 
    attendance_v={} 
    attendanceList=[] 
    attendance_obj = self.pool.get('text.based.attendance') 
    id=0 
    f = open("/home/priyan/Desktop/Store/HR_Module/attendance/savefile.txt",'rU') 
    c = csv.reader(f, delimiter=':', skipinitialspace=True) 
    for line in c: 
     if line: 
      unique_record_value=line[0][0:18] 
      name=line[0]  
      machine_code=line[0] 
      location_code=line[0] 
      in_out='sign_in' 
      #check whether records exists here 
      search_condition = [('unique_record', '=', unique_record_value)] 
      attendance_ids = attendance_obj.search(cr, uid, search_condition, context=context) 
      attendance_similar_objs = self.browse(cr, uid, attendance_ids, context=context) 

      #attendance_obj.unlink(cr, uid, [attendance_similar_objs.id], context=context) 

      if not attendance_similar_objs: 
       unique_record_value=line[0][0:18] 
       name=line[0]  
       machine_code=line[0] 
       location_code=line[0] 
       in_out='sign_in' 
       if line[0][17]==1: 
        in_out='sign_in' 
       else: 
        in_out='sign_out' 
       sign_date=line[0] 
       sign_time=line[1] 
       name=name[3:9] 
       machine_code=machine_code[0:3] 
       location_code=location_code[9:11] 
       sign_date=sign_date[11:17] 
       sign_time=sign_time[0:4] 
       fulldate=sign_date+':'+sign_time 
       fulldate=datetime.strptime(fulldate, '%y%m%d:%H%M') 
       id=id+1 
       attendance_v = {'dup_id': id,'status': 0,'name': name, 'machine_code': machine_code, 'location_code': location_code, 'in_out': in_out,'date': fulldate,'unique_record':unique_record_value} 
       attendance_obj.create(cr, uid, attendance_v, context=context) 
      attendanceList.append(attendance_v.items()) 
      with open("attendance.csv", "w") as f: 
       writer = csv.writer(f) 
       writer.writerows(attendanceList) 
    f.close() 
    os.remove(f) 
    return False 

這裏是我的錯誤

2013-10-29 09:13:36,708 10046 ERROR 201310281610 openerp.osv.osv: Uncaught exception 
Traceback (most recent call last): 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 131, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 197, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 185, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/addons/hr_attendance/hr_attendance.py", line 275, in text_files_upload 
    os.remove(f) 
TypeError: coercing to Unicode: need string or buffer, file found 
2013-10-29 09:13:36,709 10046 ERROR 201310281610 openerp.netsvc: coercing to Unicode: need string or buffer, file found 
Traceback (most recent call last): 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/netsvc.py", line 292, in dispatch_rpc 
    result = ExportService.getService(service_name).dispatch(method, params) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/service/web_services.py", line 626, in dispatch 
    res = fn(db, uid, *params) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 188, in execute_kw 
    return self.execute(db, uid, obj, method, *args, **kw or {}) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 131, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 197, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 185, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/addons/hr_attendance/hr_attendance.py", line 275, in text_files_upload 
    os.remove(f) 
TypeError: coercing to Unicode: need string or buffer, file found 
2013-10-29 09:13:36,714 10046 INFO 201310281610 werkzeug: 127.0.0.1 - - [29/Oct/2013 09:13:36] "POST /web/dataset/call_button HTTP/1.1" 200 - 
2013-10-29 09:13:36,708 10046 ERROR 201310281610 openerp.osv.osv: Uncaught exception 
Traceback (most recent call last): 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 131, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 197, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 185, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/addons/hr_attendance/hr_attendance.py", line 275, in text_files_upload 
    os.remove(f) 
TypeError: coercing to Unicode: need string or buffer, file found 
2013-10-29 09:13:36,709 10046 ERROR 201310281610 openerp.netsvc: coercing to Unicode: need string or buffer, file found 
Traceback (most recent call last): 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/netsvc.py", line 292, in dispatch_rpc 
    result = ExportService.getService(service_name).dispatch(method, params) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/service/web_services.py", line 626, in dispatch 
    res = fn(db, uid, *params) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 188, in execute_kw 
    return self.execute(db, uid, obj, method, *args, **kw or {}) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 131, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 197, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/osv/osv.py", line 185, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/home/priyan/hr_openerp/openerp-7.0/openerp/addons/hr_attendance/hr_attendance.py", line 275, in text_files_upload 
    os.remove(f) 
TypeError: coercing to Unicode: need string or buffer, file found 

,並在這裏提到我savefile.txt [其從指紋機生成]

09D043770021301312:1007*0084*02538G 

09D022195021301312:0918*0083*:3:5:G 

09D021891011301312:0906*0082*:3:5:G 
+0

請儘量準確,你的代碼的一部分導致該錯誤,只張貼弄清楚。 – rickcnagy

回答

2

你試圖傳遞一個文件對象,當您撥打os.remove(f)

嘗試把這個靠近你的代碼頂部的文件名:

filename="/home/priyan/Desktop/Store/HR_Module/attendance/savefile.txt" 

那麼你可以參考filename在既open()remove(),如:

filename="/home/priyan/Desktop/Store/HR_Module/attendance/savefile.txt" 

# snip 

f = open(filename,'rU') 

# snip 

f.close() 
os.remove(filename) 
return False 
+0

謝謝親愛的DreadPirateShawn 其作品:-) –

+1

很高興爲您提供幫助。 :-)另外值得注意的是,你使用'f'來讀取「savefile.txt」並寫上「attendance.csv」 - 這肯定會導致你錯誤地發現一些錯誤。與答案中的建議相同,那麼可能將'read_filename'和'read_file'的變量充實到讀取文件對象,'write_filename'和'write_file'來保存文件對象以便寫入? (或'in_file' /'out_file'模式也很常見。) – DreadPirateShawn

+0

謝謝親愛的DreadPirateShawn。 任何想法刪除最後react行,然後我可以設法刪除文件,如果行不存在 –

1

首先,os.rem ove()拋棄了推入參數的東西。 f是包含有關目標文件的信息的文件描述符,但不是文件名
接下來,我們來談談f的範圍。您將「f」聲明爲open()的對象,因此它必須包含在with子句中。

所以,你應該如下代碼時:

f.close()
os.remove("attandance.csv") # need a filename

+0

謝謝親愛的雷克斯Kim.now其排序:-) –

相關問題