【问题标题】:Combine text files into key/value将文本文件组合成键/值
【发布时间】:2015-05-21 15:30:01
【问题描述】:

我在 Excel 中使用宏来创建键/值对,如下所示:

Sub GetKeyValue()
    Dim FileName As String, i As Integer, str As String

    FileName = "C:\keyvalue.txt"

    Open FileName For Output As #1

    For i = 1 To 50
        str = Cells(i, 1) & ", " & Cells(i, 2)
        Print #1, str
    Next i
    Close #1
End Sub

以上取 A1-A50 和 B1-B50 中的值,并将它们用作创建文件的基础。

如何在 Python 中做类似的事情?

我的想法是有两个文本文件,一个用于键,一个用于值,然后将两者合并,然后将其存储在字典对象中。

【问题讨论】:

  • 没有得到?你的意思是一个文件包含键 A1, A2, ... A50, B1, ....B50 另一个文本文件包含相应的值,然后从中创建 xls 文件?
  • 是的,但是,它不必是 xls。它可以是具有合并键/值对的文本文件。重要的是它会存储在字典中,因为稍后将使用它来比较两个或多个字典。
  • 可以读成逗号分隔的csv吗?
  • 假设 Text1.txt 包含所有键,假设 Text2.txt 包含所有值,应创建一个文件 Merged.txt,其中键和值以逗号分隔。从那里获取 Merged.txt 并将键/值对存储在字典中。
  • @Daniel Jimenez:是的,它可以存储为 csv。哪个更容易。

标签: python excel


【解决方案1】:

您可以使用 csv 模块,假设值和键来自同一文件的单元格 A 和 B。

import csv
with open("file.csv", "r") as f:
    reader = csv.reader(f)
    d = {line[0]:line[1] for line in reader}

如果键和值来自不同的文件,您可以将这些对存储在字典中:

with open("keys.csv", "r") as the_keys, open("values.csv", "r") as the_values:
keys = csv.reader(the_keys)
values = csv.reader(the_values)
my_dic = {line1[0]:line2[0] for line1,line2 in zip(keys,values)} 

# Write to a new csv file.    
with open("final.csv", "wb") as out:
    writer = csv.writer(out, delimiter=',')
    for k,v in my_dic.iteritems():
        writer.writerow([k,v])

您可以跳过 csv 模块,只需将文件编写为:

with open("keys.txt", "r") as f, open("values.txt", "r") as x:
    h = {line1.strip():line2.strip() for line1,line2 in zip(f,x)}

with open("final.csv", "w") as out:
    for k,v in h.iteritems():
        out.write("{},{}\n".format(k,v))

【讨论】:

  • 很好,但是,我想避免使用 Excel。有没有办法使用 CSV 模块从文本文件生成 CSV?
  • 是的,这也是可能的,也很容易。如果您发布文件示例,我可以向您展示如何操作。
  • 如您所见,两个文本文件都没有逗号,这使得连接文件更加困难。目的是有一个脚本,提示用户填充文本文件,并在他们需要的地方添加一些 python 魔术,并将其格式化为 csv。
  • 这些可以匹配104-76-7:2-Ethyl-Hexanol00064-19-7:Acetic Acid 56%64-19-7:Acetic Acid Glacial
猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多