2013-04-12 41 views
1

我有這個問題。我有兩個名爲.txt,這種形式的match_list匹配來自兩個單獨文件的行

Sevilla, Ath Bilbao 
Valencia, Valladolid 
Getafe, Atl. Madrid 

data

Getafe, Atl. Madrid,5:00 PM, Coliseum Alfonso Pérez, 9.500,27.8, 2.760.000,8 
Valencia, Real Valladolid,7:00 PM, Mestalla, 41.000,26.3, 8.640.000,6 
Sevilla, Ath Bilbao,8:00 PM, Ramón Sánchez Pizjuan, 4-2-3-1,26, 5.488.000,11 

我想通過這兩個文件,參賽隊名稱循環,並複製從data.txt對應於每場比賽數據到match_list.txt

我的代碼無法處理這個(也許是因爲我只循環通過一個文件?):

match_data = open('data.txt').readlines() 
match_list = open('m_list.txt').readlines() 
outfile = open('done.txt', 'w') 

for line in match_data: 
    if line[:2] == match_list[:2]: 
     match_list = match_list+',' + line[2:] 
     outfile.write(match_list) 
+1

你自己回答:)你必須循環兩個文件,否則你如何期望匹配內容? –

回答

2

您有CSV數據,請使用csv模塊讀取它們。閱讀data.txt到內存中,先放入鍵的前兩列的字典:

import csv 

with open('data.txt', 'rb') as match_data: 
    reader = csv.reader(match_data) 
    match_data = {tuple(row[:2]): row for row in reader} 

with open('m_list.txt', 'rb') as match_list, open('done.txt', 'wb') as outfile: 
    reader = csv.reader(match_list) 
    writer = csv.writer(outfile) 

    for row in reader: 
     row = tuple(row) 
     if row in match_data: 
      writer.writerow(match_data[row]) 
+0

再次感謝這個美麗的解決方案。你是否試圖成功運行這個代碼?因爲我有一個錯誤'如果在match_data中的行:''TypeError:unhashable type:'list''抱歉打擾,但這個csv模塊還沒有在我的頭上,無法弄清楚這裏有什麼錯。 – nutship

+1

已更正;我忘了在第二階段將'list'行變成'tuple'。 –

+0

我一如既往地失去了言語。你是男人! – nutship

1

試試這個:

for line in match_list: 
    for x in match_data: 
     if x.startswith(line.split(',')[0]): 
      outfile.write(line +', '+ x) 
      break 

我沒有做任何格式每個字符串,你可以做,如果你喜歡。但是因爲大概這兩個文件中的順序不一樣,所以您需要執行匹配(如果將它們讀入真正的數據結構中會更容易 - 如果您願意,可以嘗試csv),或者只是循環兩個列表假設他們不是太大。

1

是不是你的data.txt已在格式你想你的match_list.txt是嗎?

for line in match_data : 
    for match in match_list : 
     if match[:-1] in line : # careful of \n 
     # write line to file 
     break 
+0

它是,只是匹配順序是不同的。我需要它按照'match_list'文件的順序排列。 – nutship

1

不好意思。我在你的問題中看到了「批處理文件」標籤,所以我發佈了一個批處理文件.bat解決方案。我的方法在於首先將data文件的所有行加載到由團隊名稱索引的數組中;這樣,當處理match_list文件時,可以直接訪問data的相應元素。這裏是:

@echo off 
setlocal EnableDelayedExpansion 

rem Load all lines of data.txt file into data array indexed by team name 
for /F "tokens=1* delims=," %%a in (data.txt) do (
    set data[%%a]=%%b 
) 

rem Process lines of m_list.txt file and output the corresponding data into done.txt file 
(for /F "delims=," %%a in (m_list.txt) do (
    echo %%a, !data[%%a]! 
)) > done.txt 
相關問題