Python 在同一循环中的相对路径和绝对路径之间交替
我正在努力: 循环浏览CSV文件目录 将文件名作为新列附加到每个文件 将每个文件连接到单个主文件中 但在第3步,当将绝对路径转换回相对路径时,我陷入了困境,因为我的输出看起来像../../../../../Desktop/2018.12.31.csv,而我只希望它是2018.12.31 例如,假设目录包含两个文件:2018.12.31.csv和2018.11.30.csv 2018.12.31.csv 2018.11.30.csv 运行我的程序后:Python 在同一循环中的相对路径和绝对路径之间交替,python,pandas,csv,directory,relative-path,Python,Pandas,Csv,Directory,Relative Path,我正在努力: 循环浏览CSV文件目录 将文件名作为新列附加到每个文件 将每个文件连接到单个主文件中 但在第3步,当将绝对路径转换回相对路径时,我陷入了困境,因为我的输出看起来像../../../../../Desktop/2018.12.31.csv,而我只希望它是2018.12.31 例如,假设目录包含两个文件:2018.12.31.csv和2018.11.30.csv 2018.12.31.csv 2018.11.30.csv 运行我的程序后: import os import pandas
import os
import pandas as pd
folder = ('/Users/user/Desktop/copy')
files = os.listdir(folder)
file_list = list()
for file in files:
file = os.path.join(folder, file)
if file.endswith('.csv'):
df = pd.read_csv(file, sep=";")
df['filename'] = os.path.relpath(file)
file_list.append(df)
all_days = pd.concat(file_list, axis=0, ignore_index=True, sort=False)
all_days.to_csv("/Users/user/Desktop/copy/all.csv")
我希望输出为:
A B filename
1 2 2018.12.31
3 4 2018.11.30
但事实是:
A B filename
1 2 ../../../../Desktop/copy/2018.12.31.csv
3 4 ../../../../Desktop/copy/2018.11.30.csv
如果您已经拥有.csv文件的完整文件路径,则可以使用os.path模块仅获取文件名:
df['filename'] = os.path.splitext(os.path.split(file)[1])[0]
splitext将路径字符串拆分为一个元组,扩展名作为第二个元素。
split将路径字符串拆分为一个元组,其中文件名(包括扩展名)作为第二个元素
如果您只使用.csv文件,可以简化为:
df['filename'] = os.path.split(file)[1][:-4]
返回相对于当前目录的文件位置。您可以使用os.path.basenamepath获取原始文件名,或者将文件名作为一个单独的变量保留,并设置df['filename']=file\u orig
df['filename'] = os.path.splitext(os.path.split(file)[1])[0]
df['filename'] = os.path.split(file)[1][:-4]