使用Python从CSV文件生成所有路径

时间:2017-07-17 04:08:34

标签: python csv path

我想使用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

例如,在下图中:

公司 - > Apple - > 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 个答案:

答案 0 :(得分: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->