<p>这是向您介绍Python编程的一个很好的练习。
有许多字符串函数可以使许多数据处理任务更简单。
您可以在文档中查看更多的字符串函数<a href="https://docs.python.org/3/library/string.html" rel="nofollow">https://docs.python.org/3/library/string.html</a>。在</p>
<p>首先,我建议使用os.path.join操作系统()以创建路径字符串。
其次,我建议使用内置方法sorted()对文件的行进行排序。请注意,排序时必须小心,因为排序字符串与排序整数不同。在</p>
<p>步骤1使用内置的sorted函数按列1对每一行进行排序。
这是通过传递lambda函数作为关键参数来实现的。
因为Python使用从零开始的索引,所以引用x[0]使用第一列。
所以这个特殊的lambda函数只返回每行的第一列。在</p>
<p>步骤2遍历每个文件的所有行。如果它们都匹配,那么它们就会配对在一起。
否则,一行与空行匹配。在</p>
<pre><code>import os
strpath = '.'
strFileNameA = 'file1'
strFileNameB = 'file2'
testfile1 = open(os.path.join(strpath, '%s.csv'%(strFileNameA)), 'r')
testfile2 = open(os.path.join(strpath, '%s.csv'%(strFileNameB)), 'r')
testlist1 = testfile1.readlines()
testlist1 = [eachLine.rstrip("\n").split(",") for eachLine in testlist1]
testlist2 = testfile2.readlines()
testlist2 = [eachLine.rstrip("\n").split(",") for eachLine in testlist2]
#step 1
testlist1 = sorted(testlist1,key=lambda x: x[0])
testlist2 = sorted(testlist2,key=lambda x: x[0])
#step 2
def look_for_match(i,list1,j,list2):
if i == len(list1):
return i,j+1, ([],list2[j])
elif j == len(list2):
return i+1,j,(list1[i],[])
elif list1[i][0] == list2[j][0]:
return i+1, j+1,(list1[i],list2[j])
elif list1[i][0] < list2[j][0]:
return i+1,j,(list1[i],[])
else:
return i,j+1, ([],list2[j])
matched_rows = []
i=0
j=0
while i<len(testlist1) or j<len(testlist2):
i, j, matched_row = look_for_match(i,testlist1,j,testlist2)
if matched_row[0] == [] or matched_row[1] == []:
matched_rows.append(matched_row)
for row_file_1, row_file_2 in matched_rows:
print(row_file_1, row_file_2)
for row_file_1, row_file_2 in matched_rows:
print(row_file_1, row_file_2)
</code></pre>