【问题标题】:Python - Read CSV and output to stringsPython - 读取 CSV 并输出到字符串
【发布时间】:2015-07-18 11:34:43
【问题描述】:

我对 Python 还是很陌生,我想创建一个脚本来读取包含两列的 UTF-8 CSV 文件并将输出写入 UTF-8 字符串文件。非常感谢任何帮助。

CSV 示例:

KEY,LANGUAGE
keyname1,"Nononono “%{placeholder}”?"
keyname2,"Nononon %{placeholder} nononon."
keyname3,"Open in %{placeholder}?"
keyname4,GB
keyname5,TB

期望的输出:

keyname1 = "Nononono “%{placeholder}”?",
keyname2 = "Nononon %{placeholder} nononon.",
keyname3 = "Open in %{placeholder}?",
keyname4 = GB,
keyname5 = TB

到目前为止,我能够读取 CSV 文件并使用以下代码将其输出到标准输出:

import csv

def csv_dict_reader(file_obj):

    reader = csv.DictReader(file_obj, delimiter=',')
    for line in reader:
        print(line["KEY"]),
        print(line["LANGUAGE"])

if __name__ == "__main__":
    with open("data.csv") as f_obj:
        csv_dict_reader(f_obj)

【问题讨论】:

    标签: python string csv converter


    【解决方案1】:

    为什么要为这么简单的事情费心python?

    sed -e 1d -e 's/,/ = /' -e 's/$/,/' data.csv
    

    【讨论】:

    • 大声笑!像魅力一样工作!这是一个地狱般的单线!谢谢!
    • 呵呵,如果有任何麻烦的话,我相信我可以再缩短一点:-)。不客气,如果它解决了您的问题,请记得“接受”我的回答(点击大复选标记)。
    【解决方案2】:

    将您的代码更改为:

    import csv
    def csv_dict_reader(file_obj):
    
    reader = csv.DictReader(file_obj, delimiter=',')
    for line in reader:
        print("%s = %s"%(line["KEY"],line["LANGUAGE"]))
    if __name__ == "__main__":
    with open("data.csv") as f_obj:
        csv_dict_reader(f_obj)
    

    【讨论】:

    • 我尝试更改代码,但出现 IndentationError: expected an indented block on line 4。感谢您的帮助!
    【解决方案3】:

    csv 模块让您有了一个良好的开端。

    现在你只需要open()另一个文件以“写”模式进行输出,然后write()就可以了。

    import csv
    
    def csv_dict_reader(file_obj):
        """Read a CSV file with 2 columns and output a new string. """
        reader = csv.DictReader(file_obj, delimiter=',')
        buf = ""
        for line in reader:
            buf += line["KEY"] + " = " + line["LANGUAGE"] + "\n"
    
        return buf
    
    if __name__ == "__main__":
        with open("test_trans_csv.csv") as f_obj:
            with open("test_trans_output.csv", "w") as f_output:
                txt = csv_dict_reader(f_obj)
                f_output.write(txt)
    

    【讨论】:

    • 效果很好,但我仍然需要在值中包含“”。非常感谢您的帮助!
    • 您的意思是“,”(逗号)吗?我可以在您的预期输出中看到逗号,需要吗?
    • 逗号很好 :-) 它是应该用引号括起来的字符串,如 keyname1 = "Nononono “%{placeholder}”?",
    • 你只需添加它们:buf += line["KEY"] + ' = "' + line["LANGUAGE"] + '"\n'
    • 非常感谢!我终于想出了如何在引号内添加值和 ;在每一行的末尾。 """Format KEY = "VALUE"; """ for line in reader: buf += line["KEY"] + ' = "' + line["ENGLISH"] + '"'+';'+'\n'
    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多