2012-07-24 60 views
0

在以下函数中,我从模板上传文件并将其传递给以下函数。但是如果存在\ n或\ t(This is a tab separated file),则数据会受到损坏。Django python转义字符

1.如果有\ n或某些特殊字符,它会将数据存储在下一行。如何避免这种情况。

2.data不无或数据!=“”仍然保存空值

def save_csv(csv_file,cnt): 
ret = 1 
arr = [] 
try: 
    flag = 0 
    f = open(csv_file) 
    for l in f: 
    if flag == 0: 
     flag += 1 
     continue 
    parts = l.split("\t") 
    counter = 1 
    if(len(parts) > 6): 
     ret = 2 
    else: 
     taggeddata = Taggeddata() 
     for data in parts: 
      data = str(data.strip()) 
      if counter == 1 and (data is not None or data != ""): 
       taggeddata.field1 = data 
      elif counter == 2 and (data is not None or data != ""): 
       taggeddata.field2 = data 
      elif counter == 3 and (data is not None or data != ""): 
       taggeddata.field3 = data 
      elif counter == 4 and (data is not None or data != ""): 
       taggeddata.field4 = data 
      elif counter == 5 and (data is not None or data != ""): 
       taggeddata.field5 = data 
      elif counter == 6 and (data is not None or data != ""): 
       taggeddata.field6 = data 
      counter += 1 
     taggeddata.content_id = cnt.id 
     taggeddata.save() 
     arr.append(taggeddata) 
    return ret 
except: 
    write_exception("Error while processing data and storing") 
+1

不推倒重来,使用[CSV模块(http://docs.python.org/library/csv.html)来处理CSV文件,该模块能够处理正确的转义和其他问题。 – 2012-07-24 11:19:30

回答

2
  1. 使用STDLIB的CSV模块来解析文本,这将是它好得多。

  2. 你的表情data is not None or data != ""永远是真的,你的意思是data is not None and data != ""。请注意,您可以简化这只是elif counter == 3 and data: