2017-07-17 62 views
1

我想用python製作一個程序,它將從csv文件生成所有可能的路徑。我將如何去做這件事?使用Python從CSV文件生成所有路徑

import pandas as pd 
import csv 

def dataInCol(fieldName): 
    df = pd.read_csv('..\\data.csv',usecols=[fieldName]) 
    qr = df.values.tolist() 
    flattened = [val for sublist in qr for val in sublist] 
    return flattened 


def makingPaths(dataCol, path = "Companies: "): 
    with open('..\\data.csv', "rb") as f: 
     reader = csv.DictReader(f) 
     headers = reader.fieldnames 
    for eachValue in dataCol: 
     path = path + str(eachValue) 
     if str(eachValue) in headers: 
      newCol = dataInCol(str(eachValue)) 
      makingPaths(newCol) 
     break 
    return path 

例如下圖中:

公司 - >蘋果 - > iPhone - > iPhone4.0

公司 - >三星 - > Gtablet - > SamTab7.0

...

公司 - >索尼 - >的Xperia - > Xperia4K

... 鏈接數據:https://docs.google.com/spreadsheets/d/11puxvQH6z6D3xiKybHEVbBpMp_Zv87LjlTd_ZIxYNw8/edit?usp=sharing

CSV Data Image

Companies Apple Samsung Sony iPhone Mac iPad Galaxy Notebook Gtablet Xperia Xtablet 
Apple iPhone Galaxy Xperia iPhone4.0 Macbook iPadMini GalaxyS3 NSeries5 SamTab7.0 Xperia4K XTab6.0 
Samsung Macbook Notebook Xtablet iPhone4.7 MacPro iPadReg GalaxyS4 NSeries7 SamTab9.0 XperiaUltra XTab8.0 
Sony iPad Gtablet  iPhone5.5 MacBookPro iPadPro GalaxyS8 NSeries9  XperiaPrem XTab10.0 
+1

張貼csv作爲文本將是一個改進... –

+0

請將您的數據添加爲文本,詳細說明您正在嘗試執行的操作並添加您目前使用的代碼。 –

+0

「路徑」是什麼意思?一個'str'對象或什麼? –

回答

0

這似乎是一個家庭作業的問題,但我覺得它很有趣所以這裏就是我所做的:

csvfile = open('data.csv', 'r') #open the csv file 
lines = csvfile.readlines() # read the file into a list, one line per element 
headings = [cell.strip() for cell in lines[0].split(",")] #keep a clean list of headings 
splitlines = [] 
for line in lines[1:]: # split each row into cells 
    splitlines.append(line.split(",")) 
columns = zip(*splitlines); # convert rows to columns 

def recursePrint(colval, text): # a recursive function to traverse the columns 
     colval = colval.strip() 
     if (colval in headings): 
      for c in columns[headings.index(colval)]: 
       newtext = text + colval + "->" 
       recursePrint(c, newtext) 
     else: 
      print (text + colval) 


for x in columns[0]: 
    recursePrint(x, "") # run the recursion 

和輸出:

Apple->iPhone->iPhone4.0 
Apple->iPhone->iPhone4.7 
Apple->iPhone->iPhone5.5 
Apple->Macbook 
Apple->iPad->iPadMini 
Apple->iPad->iPadReg 
Apple->iPad->iPadPro 
Samsung->Galaxy->GalaxyS3 
Samsung->Galaxy->GalaxyS4 
Samsung->Galaxy->GalaxyS8 
Samsung->Notebook->NSeries5 
Samsung->Notebook->NSeries7 
Samsung->Notebook->NSeries9 
Samsung->Gtablet->SamTab7.0 
Samsung->Gtablet->SamTab9.0 
Samsung->Gtablet-> 
Sony->Xperia->Xperia4K 
Sony->Xperia->XperiaUltra 
Sony->Xperia->XperiaPrem 
Sony->Xtablet->XTab6.0 
Sony->Xtablet->XTab8.0 
Sony->Xtablet->XTab10.0 
Sony->