25 votes

Comment extraire le nom d'un fichier à partir d'un chemin d'accès ?

J'ai le code suivant :

os.listdir("staging")

# Seperate filename from extension
sep = os.sep

# Change the casing
for n in os.listdir("staging"):
    print(n)
    if os.path.isfile("staging" + sep + n):
        filename_one, extension = os.path.splitext(n)
        os.rename("staging" + sep + n, "staging" + sep + filename_one.lower() + extension)

# Show the new file names
print ('\n--------------------------------\n')
for n in os.listdir("staging"):
    print (n)

# Remove the blanks, -, %, and /
for n in os.listdir("staging"):
    print (n)
    if os.path.isfile("staging" + sep + n):
        filename_zero, extension = os.path.splitext(n)
        os.rename("staging" + sep + n , "staging" + sep + filename_zero.replace(' ','_').replace('-','_').replace('%','pct').replace('/','_') + extension)

# Show the new file names
print ('\n--------------------------------\n')
for n in os.listdir("staging"):
    print (n)

"""
In order to fix all of the column headers and to solve the encoding issues and remove nulls, 
first read in all of the CSV's to python as dataframes, then make changes and rewrite the old files
"""
import os
import glob
import pandas as pd

files = glob.glob(os.path.join("staging" + "/*.csv"))

print(files)

# Create an empty dictionary to hold the dataframes from csvs
dict_ = {}

# Write the files into the dictionary
for file in files:
    dict_[file] = pd.read_csv(file, header = 0, dtype = str, encoding = 'cp1252').fillna('')

Dans le dictionnaire, les cadres de données sont nommés "folder/name(csv)". Ce que je voudrais faire, c'est supprimer le préfixe "staging/" des clés du dictionnaire.

Comment faire ?

47voto

coldspeed Points 111053

Si tout ce que vous voulez faire est de tronquer les chemins d'accès aux fichiers pour n'avoir que le nom du fichier, vous pouvez utiliser os.path.basename :

for file in files:
    fname = os.path.basename(file)
    dict_[fname] = (pd.read_csv(file, header=0, dtype=str, encoding='cp1252')
                      .fillna(''))

Exemple :

os.path.basename('Desktop/test.txt')
# 'test.txt'

8voto

Justin Malinchak Points 137
import os
pathname ='c:\\hello\\dickins\\myfile.py'
head, tail = os.path.split(pathname)
print head
print tail

4voto

Santhosh Points 169

Este article ici, tout s'est bien passé pour moi

import os
inputFilepath = 'path/to/file/foobar.txt'
filename_w_ext = os.path.basename(inputFilepath)
filename, file_extension = os.path.splitext(filename_w_ext)
#filename = foobar
#file_extension = .txt

path, filename = os.path.split(path/to/file/foobar.txt)
# path = path/to/file
# filename = foobar.txt

J'espère que cela aidera quelqu'un qui cherche cette réponse

0voto

JerryPlayz101 Points 67

Comme ColdSpeed l'a dit, vous pouvez utiliser "os.path.basename" pour tronquer un fichier à son nom, mais je pense que ce à quoi vous faites référence est la capacité de mettre en cache les données ?

Par exemple, voici mon répertoire : My Directory for the Game I'm Making Atm In the Assets folder..

Vous voyez le pycache qui l'initialise en tant que module. Ensuite, vous pouvez importer un fichier de ce module (par exemple le fichier staging.txt et l'utiliser). For Example J'utilise le fichier IpConfig.txt qui se trouve au niveau du dossier assets (ou qui devrait s'y trouver) et j'en retire une ligne d'information.

import pygame as pyg
import sys
import os
import math
import ssl
import socket as sock
import ipaddress as ipad
import threading
import random
print("Modules Installed!")

class two:
    # Find out how to refer to class super construct
    def main(Display, SecSock, ipadd, clock):
        # I have code here that has nothing to do with the question...

    def __init__():
        print("Initializing[2]...")
        # Initialization of Pygame and SSL Socket goes here

        searchQuery = open("IpConfig.txt", 'r') #Opening the File IpConfig(Which now should open on the top level of the game files)

        step2 = searchQuery.readlines()# read the file
        ipadd = step2[6] # This is what you should have or something similar where you reference the line you want to copy or manipulate.

        main(gameDisplay, SSLSock, ipadd, clock)# Im having issues here myself - (main() is not defined it says)
        print(ipadd)
        print("Server Certificate Configuration Enabled...")

    __init__() # Start up the procedure

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X