需要将多个csv文件写入新文件夹

0 投票
2 回答
5742 浏览
提问于 2025-04-18 02:43

我在这里找不到关于这个话题的任何信息,非常希望能得到大家的帮助!我对python还很陌生,但我有一些代码。

我有多个文件在一个文件夹里,想要读取它们,转置(也就是交换行和列),然后再把它们写入一个新的文件夹。我觉得我已经有了大部分的代码,但就是不知道怎么把所有的文件写回去。

这是我的代码:

path = 'C:\Users\Christopher\Documents\Clemson\Pleurodires\stability data\Es03\fixed\processed'
filenames = glob.glob(path + "/*.csv")
for filename in filenames:
    dfs = (pd.read_csv(filename))
    df = dfs.transpose()
    df.to_csv('transposed\' + 'Tr_' + filename)

最后一行(我希望如此)应该把所有的新文件放到一个叫做'transposed'的文件夹里,并在原文件名的前面加上'Tr_'(比如如果原文件名是'hello',那么在'transposed'文件夹里它的名字就会变成'Tr_hello')。

但是当我运行上面的代码时,它显示工作正常,但文件在我电脑上根本找不到。我尝试了很多不同的方法来让df.to_csv工作,这是我目前最接近的结果。

编辑

感谢大家的帮助,我最终结合了Nanashi和EdChun的代码,得到了这个,效果很好:(最终的文件在正确的文件夹里,名字是Tr_filename)

path = r'C:\Users\Christopher\Documents\Clemson\Pleurodires\stability data\Es03\fixed\processed'
filenames = glob.glob(path + "/*.csv")
for filename in filenames:
    short = os.path.split(filename)
    newfilename = 'Tr_%s' % short[-1]
    #print newfilename
    dfs = (pd.read_csv(filename))
    df = dfs.transpose()
    df.to_csv(os.path.join('transposed', newfilename))

2 个回答

0

你的代码似乎有很多错误,试试下面这个:

import os
path = r'C:\Users\Christopher\Documents\Clemson\Pleurodires\stability data\Es03\fixed\processed'
filenames = glob.glob(path + "/*.csv")
for filename in filenames:
    dfs = (pd.read_csv(filename))
    df = dfs.transpose()
    df.to_csv(os.path.join(r'transposed\Tr_', filename))
1

几点说明:

  1. filenames = glob.glob(path + "/*.csv") -- 如果我没记错的话,这里应该用反斜杠,而不是正斜杠。正斜杠主要是在Unix系统等地方用的,但在Windows系统中,路径名称是用反斜杠的。

  2. 试着打印一下 filename。这样你可以看到完整的路径。在 df.to_csv 这一行,你实际上是在写入 path + filename + transposed + Tr + filename。你需要单独提取出具体的文件名(可以使用 split 或者 os 模块来实现)。

我在用Ubuntu,所以这些可能不完全适用,但我会这样做。

import pandas as pd
from glob import glob

path = "/home/nanashi/Documents/Python 2.7/Scrapers/Scrapy/itbooks"
filenames = glob(path + "/*.csv")

for filename in filenames:
    specname = filename.split("/")[-1]
    print filename
    print specname
    dfs = pd.read_csv(filename)
    df = dfs.transpose()
    df.to_csv("transposed/%s" % specname)

结果:

/home/nanashi/Documents/Python 2.7/Scrapers/Scrapy/itbooks/realestateau.csv
realestateau.csv
/home/nanashi/Documents/Python 2.7/Scrapers/Scrapy/itbooks/itbooks.csv
itbooks.csv
[Finished in 0.6s]

转置文件的截图:

在这里输入图片描述

如果这有帮助,请告诉我们。

撰写回答