2016-04-07 11 views
1

私はPythonを使い始めました。 私は7列の.csvファイルを持っています。 最初の列は、特定のファイル、例えばへのパスが含まれています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

オーナーとパスを2つの列に分割しますか? – 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スプリットと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:])) 

によって達成することができます。

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

ありがとう、それは助けました:) –

1

osモジュールは、3回の異なる分割が

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

ありがとう、それは私のために働いた:) –