如何使用另一个文件中一行中的索引写入或创建字典



您好,我编写了这个程序来重新格式化文件中的信息,以便用逗号分隔,而不是分隔符"|",现在我这样做了,我想创建另一个函数,该函数使用此重新格式化的信息使用索引将文件中的某些信息写入字典,我的问题实际上是这样做,因为我总是尝试使用 for 循环,但它不起作用。我在理解如何使用字典时遇到了一些麻烦,这似乎很简单,但是我如何访问字典的信息输出,它是创建,还是必须创建该信息的输出文件?

def dicList():
    dictList = csv.reader(open('C:/Python/data.txt', 'rb'))
    for row in dictList:
        newRow= ' '.join(row)
        listOne = newRow.replace('|',',')

另一件小事,这个函数把这样的值放"hash,version,product,os"

没有引号,所以它不会输出为我想要的列表,而且我也不知道如何做到这一点。

总的来说,我

试图做的是编写字典,以便我可以将另一个文件中的值与它进行匹配,我使用此方法的原因是因为文件很大,所以我不能只是相互运行它们进行匹配。 我希望使用此字典运行我另一个文件中的值以将匹配项输出到另一个文件中。 如果它没有意义,我可以澄清。

让我进一步澄清一下我拥有的信息在文件中,信息作为"数据,数据,数据"输出到该文件中,现在我通过该功能将信息放在列表中

def dicList():
dictList = csv.reader(open('C:/Python/hashsetsdotcom_data.txt', 'rb'), delimiter = '|')
for row in dictList:
        print row[0], row[2]

我在这里打印的两个值是我想在字典中作为键,值的值,但我希望它遍历整个文件,大约 800 万行,我希望能够使用此数据运行另一个文件,这与这个文件有关, 并从那里提取值以将其与字典值匹配,然后将这些匹配的值输出到另一个。 所以最后我会有

"

键,值"与另一个文件中的"匹配"----。

应该更清楚,但没有意识到我应该有多具体。

这是我的代码现在所在的地方,我在尝试将另一个文本文件中的数据值与字典中的值匹配时遇到问题,这可能对吗?要遍历我有此类值的文件并运行脚本以检查它们是否与字典值匹配,然后像我在上一个函数中尝试的那样输出所有三个值?

def dicList():
dictList = csv.reader(open('C:/data.txt', 'rb'), delimiter = '|')
for row in dictList:
        print row[0], row[2]
def dictAppend():
output = []
fhand = open('C:/Python/lex.txt', 'w')
for row in dicList():
    one_entity = {row[0]:row[2]}
    output.append(one_entity)
def findMatch():
fhand = open('C:/Python/search.sql', 'r')
fig = open('C:/Python/lex.txt', 'w')
for line in fhand:
    if line[1] == dictAppend()[0]:
        fig.write(dictAppend()[0], dictAppend[1], line[13])

根据评论,我将包括两个解决方案,一个是对评论的响应,另一个假设存在像 CSV 的 Excel 方言这样的标题。

您的解决方案的问题在于您没有设置delimter来反映数据

def dicList():
    dictList = csv.reader(open('C:/Python/data.txt', 'rb'), delimiter="|")
    for row in dictList:
       #the data should now be pre-separated into a list
       print row

这将按管道而不是逗号拆分字段,无需字典 - 它将是一个列表,就像任何其他 csv 文件一样。 您可以用逗号连接它们,并在需要时将它们写回输出。

要获得您似乎想要的字典格式,您需要按索引访问值并手动转换:

output = []
for row in dictList:
  one_entity = {row[0]:row[1],row[2]:row[3]}
  output.append(one_entity)

当然,假设数据像您在评论中所说的那样以交替的键值格式进行规范化。

key1|val1|key2|val2

带有标题的csv解决方案,每个字段都在字典中键入:

data_dictionary = dict()
line_no = 0
fields = 0
output = []
csv_data = csv.reader('C:filepath')
for line in csv_data:
  if line_no == 0:
    #read the first line as the keys for the final dict
    fields = line
    line_no+=1
    continue
  field_index = 0
  one_entity = {}
  for answer in line:
    one_entity[fields[field_index]] = answer.strip()
  output.append(one_entity)
  line_no+=1

这些解决方案的组合应该可以让你到达你需要的地方。

编辑

直到他指出,我才意识到这一点,但是 J.F Sebastian 提到了csv.dictReader来完成我上面的例子,如果没有为fieldnames参数传递值,默认情况下将使用 csv 文件的第一行作为字段名称。

http://docs.python.org/library/csv.html#csv.DictReader

字典创建键值 u 对,因此

Diclist = {}

创建空字典

diclist["hello"] = 5

创建键为"hello"且值为 5 的条目

diclist["hello"] = [5,6,7,8,9]

用列表覆盖该条目

print diclist["hello"]

将打印该列表

for x in diclist

x 将是 diclist 中的所有值。

相关内容

  • 没有找到相关文章

最新更新