【问题标题】:Need to write multiple csv files to new folder需要将多个 csv 文件写入新文件夹
【发布时间】:2014-04-14 19:20:22
【问题描述】:

我无法在此处找到有关此主题的任何信息,非常感谢您的帮助!我对 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”,那么现在应该是'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))

【问题讨论】:

  • 有什么问题?你有错误吗?还是文件写入了错误的位置?还是根本不写?
  • 嗨 Cyber​​,感谢您的帮助,我没有收到错误消息,但文件根本没有写入(至少我在计算机上的任何地方都找不到它们)。跨度>
  • 您是否尝试过将您的to_csv 呼叫更改为df.to_csv(path + '\transposed\' + 'Tr_' + filename) 之类的名称
  • 我看不出该代码将如何运行。 to_csv 行不是 SyntaxError 吗?
  • @c_mayerl 请打印文件名的输出,我会在您调用to_csv 之前构建您的目标路径和文件并打印它以确认它看起来正确

标签: python csv pandas transpose


【解决方案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]

转置文件的屏幕截图:

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

【讨论】:

  • 您好 Nanashi,感谢您的帮助。我已经尝试按照您的建议进行操作,但没有收到错误消息,也没有收到任何文件。也许是因为我使用的是 Windows,因为它看起来非常适合您!打印出文件名确实显示了我想要转置的所有文件。
  • 请检查您的反斜杠是否转义任何内容。另外,是否可以编辑帖子并附加更新的代码? :)
  • 已经完成了!感谢您的所有帮助,我非常感谢!
  • 如果我们的任何答案解决了您的问题,请不要忘记将其标记为已接受;如果您发现它们有帮助,请点赞。这就是我们在 SO 中表达感谢的方式。 :)
【解决方案2】:

您的代码似乎有多个错误尝试以下操作:

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))

【讨论】:

  • 感谢 EdChum 的建议,我试过了,看起来它成功转置了我的文件,但没有创建任何新文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2019-07-23
  • 2018-08-10
相关资源
最近更新 更多