Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在同一循环中的相对路径和绝对路径之间交替_Python_Pandas_Csv_Directory_Relative Path - Fatal编程技术网

Python 在同一循环中的相对路径和绝对路径之间交替

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

我正在努力:

循环浏览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 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]