日安先生们女士们
我有两个主文件(我们称它们为one.csv和two.csv)和一条指令,用于解析它们并将它们合并到特定目录结构下的多个文件中。我设法完成了它的第一部分,并构建了一个包含底层文件的目录结构。我唯一不能靠自己完成的就是我的第二部分,也是最后一部分。现在我将模拟两个CSV文件的相关内容:
one.csv:
- ID、状态、日期、资产、频率
1.4815162342,开放,29/02/1842,9765,每月
1.......这是什么?
two.csv:
1.服务、说明、ID、属性、活动
- IDR,传导,4815162342,完成,THEONETHATGOTAWAY_01
- IDR,指挥,4815162342,Todo,THEONETHATGOTAWAY_02
- IDR,传导,4815162342,Todo,THEONETHATGOTAWAY_03
NOTE: The first line of both files, as it usually goes, is constant as it represents column name.
我设法做的部分是解析**one.csv*,并以正确的格式将其写入多个文件(file01.csv、file02.csv、file03.csv等),每个文件都包含一个列名和从第2行开始的相应值;像这样:
file01.csv:
1.电话:4815162342**
1.状态:,打开
1.日期:1842年2月29日
1.资产:,9765
1.频率:每月
- EOF*
我脑子里拒绝成功的是,在解析one.csv并将其写入文件后,再次打开每个文件,读取4815162342(作为示例)。在每个文件中它都不同,但它的位置显然是相同的),然后在two.csv* 中查找它,如果它在一行中匹配,则将该行的第4个元素(THEONETHATGOTAWAY_xx)追加到file01.csv**;像这样:
file01.csv:
1.电话:4815162342**
1.状态:,打开
1.日期:1842年2月29日
1.资产:,9765
1.频率:每月
1.Theonethatgaway_01
1.Theonethatgaway_02
1.酒店THEONETHATGOTAWAY_03
- EOF*
这最后一个file01.csv是我的目标。
目前为止我尝试的是:
为了尝试比较两个文件是否具有相同的ID,如果成功则打印,我尝试:
...
directory = '/home/user/work/'
with open(directory + 'one.csv', 'r') as one, open(directory + 'two.csv', 'r') as two:
# One:
sheetOne = csv.reader(one, delimiter=';')
titleOne = next(sheetOne) # First row as constants (ID,Status,Date,Asset,Frequency)
# Two:
sheetTwo = csv.reader(two, delimiter=',')
for rowOne in sheetOne:
for rowTwo in sheetTwo:
if rowTwo[2] == rowOne[0]: # Check if ID in one.csv row is same as ID in two.csv row
print("Equal: " + rowTwo[2] + "&" + rowOne[0])
- EOF*
而不是print("Equal: " + rowTwo[2] + "&" + rowOne[0])
with open(directory + "output/" + rowOne[*] + "/" + rowOne[*].capitalize() + "/" + rowOne[*] + ".csv", 'a') as f_2:
f_2.write(rowTwo[4] + ";")
我就不会再做了。
在这一点上我非常绝望。一旦我找到答案,答案可能会非常明显。我猜这是不对的
for rowOne in sheetOne:
for rowTwo in sheetTwo:
if rowTwo[2] == rowOne[0]: # Check if ID in one.csv row is same as ID in two.csv row
我很肯定其他答案不会满足我的具体需求,但如果我的问题被标记为重复,我不会感到惊讶,因为我已经无法再玩剧本了。已经好几周了:)
先谢谢你。
1条答案
按热度按时间wi3ka0sx1#
一种开销较小的方法是使用pandas:
输出(
file01.csv
):以表格格式:
FF的观点: