输入文件:
文件1.txt
danial,23,janitor
adam,42,waiter
katherine,21,teacher
文件2.txt
danial,5,broadway street
brooke,4,hughway street
adam,3,new street
所需输出:
danial,23,janitor,5,broadway street
adam,42,waiter,3,new street
katherine,21,teacher
brooke,4,hughway street
我的当前代码:
with open('C:\\Users\\user\\Desktop\\Dap\\job.txt') as f1, open('C:\\Users\\user\\Desktop\\Dap\\address.txt') as f2:
job = {}
for line in f1:
name, age, job = line.split(',')
address[name] = age, job
address = {}
for line in f2:
name2, num, address = line.split(',')
course[name2] = num, address
common = set(job.keys() & set(address.keys()))
with open('C:\\Users\\Izz\\Desktop\\Data\\output.txt', 'w') as f:
for i in common:
f.write("%s\t%s\t%s\n" % (i, job[i], address[i]))
编辑:
有了这个代码,我只打印了一个类似的键。 我设法做了一个dictionary方法,将第一列指定为键,但只能打印具有相似键的列。你知道吗
这似乎是你想要的:
描述:
我们首先创建一个
tmp
defaultdict来存储每个人可能拥有的各种属性(年龄、职业等)。每当我们第一次访问一个键时,defaultdict为我们创建一个空列表,这允许我们执行tmp[name] += (a, b)
,而不必首先检查name
是否已经存在(如果不存在,则创建一个新列表),从而提高可读性。你知道吗请看^{} 文档以获得对此的解释,因为这里提供的示例非常简洁。你知道吗
迭代} 去除这些行,然后再继续。你知道吗
f1
和f2
将产生文件的每一行,包括任何换行符,因此我们必须首先使用^{如果输入文件有空行,则使用{{CD8}}检查^ {< CD9>}是否为空字符串,^ {< CD10>}(其计算为^ {CD11>}),如果是,则跳过它。我们本可以选择:
然而,这是一种稍差的形式,更倾向于在假设一切都按计划进行的情况下编写代码,而引入if语句来处理异常情况将提高其可读性。你知道吗
我们现在用^{} 将每一行分成三个部分,并将结果解压成变量
name
、a
、b
,假设输入文件的格式始终是persons name,后跟两个任意属性,用逗号分隔。(如果您不确定元组解包是如何工作的,this似乎为元组提供了一个很好的介绍(包括解包)。你知道吗既然我们可以这样扩展列表:
然后我们通过执行
tmp[name] += (a, b)
将我们的人的属性a
和b
附加到tmp[name]
。你知道吗使用每个人的名字和属性构建了
tmp
字典之后,最后一步是将它写入out文件。你知道吗这里我们使用list comprehension来格式化输出(如果您对此也不确定,请查看链接的文档),如果您不熟悉
*
操作符,则在这里使用它来解压缩v
(这是名为k
的人的属性列表),link to doc。你知道吗然后^{} 将
lst
(在本例中是(k, *v)
)中的字符串组合成一个字符串,每个值用','
分隔。你知道吗最后,由于^{} 没有为我们包含它们,所以我们在末尾添加了一个新行,并使用
writelines()
将行写入文件。你知道吗相关问题 更多 >
编程相关推荐