2016-08-05 12 views
-2

Ich versuche, die Erweiterung zu entfernen, die in jedem Dateiname in meinem Array gefunden wird.geteilte Dateierweiterung von einem Array

Ich habe

files = ['file.tsv', 'file2.tsv', 'file3.tsv'] 

und der Ausgang

files = ['file', 'file2', 'file3'] 

sein wollen Wie führe ich diese Funktion auf einem Array?

Antwort

3

Sie würden wahrscheinlich eine Liste Verständnis mit Ihrem vorhandenen Liste möchten:

import os 
no_extensions = [os.path.splitext(file_name)[0] for file_name in files] 

Sie os.path.splitext statt file_name.split('.') verwenden sollte, weil es auch, wenn Ihre Dateinamen arbeiten habe eine Periode in ihrer Mitte (z "file.partial.dat" schlägt mit file_name.split('.'))

fehl
0
print str(files).replace(".tsv","") 

wahrscheinlich nicht ist, was Ihr Lehrer will, aber es wird in etwa richtig aussehen; P

0
import re 

pat = re.compile(r'\.') 

['.'.join(pat.split(k)[:-1]) for k in files] 
-1

ich tun würde ...

Files = [n.split()[0] for n in files] 
0

Hier ist eine allgemeine Art und Weise ist, es zu tun was auch immer die Erweiterung.

fileNames = [s.split('.')[0] for s in files] 

Es erstellt eine neue Liste und lässt Ihre ursprüngliche unverändert.

EDIT:

Wenn Sie Namen mit Punkten in ihm (wie file.tsv.zip) haben, gibt es noch eine Möglichkeit, es zu tun, ohne ohne Import:

fileNames = ['.'.join(s.split('.')[:-1]) for s in files] 

Und wenn Sie wollen unterstützen auch Dateien ohne Erweiterung, dann besser nutzen diese ein:

fileNames = [s if s.find('.')==-1 else '.'.join(s.split('.')[:-1]) for s in files] 

(okay, es wird immer ein bisschen schmutzig aber: P)

So die letzte gibt:

>> files = ['file.tsv', 'file2.tsv.zip', 'file3'] 
>> fileNames 
    ['file', 'file2.tsv', 'file3']