同一循环中相对路径和绝对路径之间的替代

问题描述 投票:0回答:1

我正在尝试:

  1. 循环浏览CSV文件的目录
  2. 将文件名作为新列追加到每个文件中
  3. 将每个文件合并为一个主文件

但是在将绝对路径转换回相对路径时,我陷入了第3步,因为当我只希望它为../../../../Desktop/2018.12.31.csv时,我的输出看起来像2018.12.31

例如,假设目录包含两个文件:2018.12.31.csv2018.11.30.csv

2018.12.31.csv

A B
1 2

2018.11.30.csv

A B
3 4

运行程序后:

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
python pandas csv directory relative-path
1个回答
0
投票

如果您已经具有.csv文件的完整文件路径,则可以使用os.path模块仅获取文件名:

df['filename'] = os.path.splitext(os.path.split(file)[1])[0]

0
投票

os.path.relpath返回相对于当前目录的文件位置。您可以使用os.path.basename(path)获得原始文件名,或者仅将文件名保留为单独的变量并设置df['filename'] = file_orig

© www.soinside.com 2019 - 2024. All rights reserved.