2017-07-17 29 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->