如何使用python在CSV文件中对齐数据

时间:2017-03-10 09:54:35

标签: python csv

我使用以下代码将数据写入csv文件:

filename = "DETAILS.csv"
f = open(filename, "a")
f.write(
    school_name + "," + affiliation_no + "," + state + "," + district + ","   
    + postal_address + "," + phone_no + "," + email_id + "," + web_site + "," 
    + year_of_foundation + "," + date_of_opening + "," + name_of_principal + ","
    + status_of_school + "," + type_of_affiliation + "," + affiliation_period_from + ","
    + affiliation_period_to + "," + name_of_trust_society_managing_committee + "\n")

f.close()

我以这种格式获得输出:

列和数据未在csv文件中对齐。我每个条目需要一行。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

作为一般规则,当您使用CSV文件时,不应使用标准文件操作,而应使用csv模块中的writerreader类。这些类负责引号和用于分隔文件中列的字符(在您的案例中为逗号,)。它们还可以自动正确处理数字和字符串。

所以,你的代码变成了这个:

import csv

filename = "DETAILS.csv"
f = open(filename, "a")

# create a CSV writer object:
csvwriter = csv.writer(f)

# create a list of values that will be written to the file:
dat = [school_name, affiliation_no, state, district, postal_address,
       phone_no, email_id, web_site, year_of_foundation, date_of_opening,
       name_of_principal, status_of_school, type_of_affiliation,
       affiliation_period_from, affiliation_period_to, 
       name_of_trust_society_managing_committee]

# write the list to the file, using ',' automatically to separate the 
# columns:
csvwriter.writerow(dat)

f.close()

但仅此一点可能不足以解决您的问题。看起来用于打开CSV文件的程序遇到一个或多个无法正确解释的字符。正如其他人所指出的那样,违规字符可能是制表符\t或换行符\n,但由于您似乎拒绝粘贴文件的某些实际内容,因此无法使用确实知道这一点。

但是,您可以使用以下代码用空格替换这些字符。列表推导处理数字和字符串:

dat = [val.replace("\n", " ")
          .replace("\t", " ") if type(val) is str else val for val in dat]

您可以在我的代码示例中调用csvwriter.writerow(dat)之前添加此内容,以确保在将行写入CSV文件之前删除有问题的字符。

答案 1 :(得分:0)

您的字符串似乎不是有效的csv格式。

你应该确定这些事情:

  • 删除无用的逗号,如果数据中有逗号,则应尝试使用双引号,例如:

    data,"{'response':1}"

  • 删除\n\t字符,它们会弄乱您的数据。

查看Comma separated values from wikipedia

希望这有帮助。