2016-04-07 85 views
1

我是Pyhthon的新手,並且一直在堅持一些工作。 我有一個.csv文件,有7列。 第一列包含路徑某些文件,如:使用python從列中分離目錄

Name 
a/b/c.xyz 
m/n/o/p.sad 
p/q/r/s/t/u.asas 

我需要單獨的目錄(路徑)的文件,和業主是'a''m''p'爲各自的行。我已經使用熊貓導入了.csv文件。我讀過os.path可能會有所幫助。任何建議都將非常感謝。同時,我正在處理的數據非常大,所以需要注意執行腳本的開銷。

謝謝。

+0

是否要將業主和路徑分爲兩列? – MaxU

+0

是的,先生,這是我打算做的。 –

回答

0

如果你只是想找到所有者和文件名,可以通過拆分來完成。

import csv 

owner,file =[],[] 
with open(filePath,'rb') as f: 
    reader = csv.reader(f) 
    for line in reader: 
     owner.append(line.split('/')[0]) 
     file.append(line.split('/')[-1]) 

,如果你需要找到的文件路徑,並刪除所有者,它可以被拆分和os.path.join

import csv 
import os 
owner,file =[],[] 
with open(filePath,'rb') as f: 
    reader = csv.reader(f) 
    for line in reader: 
     owner.append(line.split('/')[0]) 
     file.append(os.path.join(*line.split('/')[1:])) 

os.path.join例如實現:

string = 'p/q/r/s/t/u.asas' 
    os.path.join(*string.split('/')[1:]) 
    output: 
    'q\\r\\s\\t\\u.asas' 
+0

謝謝,它幫助:) –

1

你提到的os模塊知道三種不同的變種分裂

os.path.split os.path.splitdrive os.path.splitext

如果你只是想你的字符串的第一部分只使用<str>.split('/')[0]

>>> 'p/q/r/s/t/u.asas'.split('/') 
>>> 'p' 

我也建議使用內置csv模塊來讀取您的文件。熊貓似乎過度殺傷。

這裏有一個很好的source關於如何使用模塊。我特別喜歡csv.DictReader類。

+0

'os.path.dirname'和'os.path.basename'也可能有用。 – IanS

+0

感謝您的幫助:) –

0

是你想要的嗎?

In [64]: df 
Out[64]: 
       Name 
0   a/b/c.xyz 
1  m/n/o/p.sad 
2 p/q/r/s/t/u.asas 

In [66]: df.Name.str.extract(r'(?P<owner>.)(?P<path>/.*)', expand=True) 
Out[66]: 
    owner    path 
0  a   /b/c.xyz 
1  m  /n/o/p.sad 
2  p /q/r/s/t/u.asas 
+0

謝謝,它爲我工作:) –