【问题标题】:looping files and extracting segments in Python在 Python 中循环文件和提取段
【发布时间】:2017-10-24 02:40:51
【问题描述】:

我正在尝试创建一个循环并提取位于文件夹中的一些文件段。我可以在 R 中轻松地做到这一点,但在 Python 中我遇到了麻烦。我已经尝试过使用 os 和 glob。

R 中的代码如下所示:

## loop over all files
for (i in 1:length(file)) {

    ## extract file name
    file.name <- strsplit(file[i],"\\.")[[1]][1]

    ## extract file header
    file.head <- readLines(file[i], n = length(grep("#", readLines(file[i]))))
....

我用 Python 编写的代码如下所示(路径是目录):

for file in os.listdir(path):

    ## extract file name
    filename = os.fsdecode(file)

    ## extract file header
    tempfile = os.open(file, os.O_RDWR)

虽然我是 Python 新手,但我不相信这么简单的事情会如此耗时。感谢您的帮助,因为我已经在网上搜索了答案。

【问题讨论】:

  • 你遇到了什么错误?
  • 临时文件出现错误:FileNotFoundError Traceback (最近一次调用最后一次) in () ----> 1 tempfile = os.open(文件,os.O_RDWR)
  • 欢迎来到 SO。不幸的是,这不是一个讨论论坛或代码编写服务。请花时间阅读How to Ask 及其包含的链接。您应该花一些时间通过the Tutorial 练习这些示例。它将向您介绍 Python 必须提供的工具,您甚至可能会开始获得解决问题的想法。

标签: python r python-3.x


【解决方案1】:

首先,您可以使用os.scandir 获取路径,而不是文件名。

然后,使用file.readlines():

for file in os.scandir(path):
    tempfile = os.open(file).readlines()

我不熟悉 R 语法,但您似乎想要获取所有以 # 开头的行。为此,只需使用列表推导:

for file in os.scandir(path):
    tempfile = [l for l in os.open(file).readlines() if l[0] == '#']

实际上,您可以直接遍历文件,这将遍历行:

for file in os.scandir(path):
    tempfile = [l for l in os.open(file) if l[0] == '#']

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多