当前位置: 首页 > 知识库问答 >
问题:

循环访问目录中的文件,并根据其他文件从中删除行

司马祖鹤
2023-03-14

我正在寻找一种方法来迭代目录中的30个文件,并从他们删除基于其他文件中的id行。这些文件包含两列——ID和一个值,没有列名。另一个文件只包含一个应该删除的id(“id”)列(“ids_toberemoved”)。30个文件清理后,我想把它们导出到其他文件夹。

这是我目前掌握的情况:

import pandas as pd
import os

ids_toberemoved = pd.read_csv('F:\\ids.csv')

myPath = "F:\\Other"

filesList= []

for path, subdirs, files in os.walk(myPath):
    for name in files:
        filesList.append(os.path.join(name))

dataframes = []

for filename in filesList:
    dataframes.append(pd.read_csv(filename))

for df in dataframes:
    df_cleaned = df.merge(ids_toberemoved, left_index=True, right_on=['id'],
                   how='left', indicator=True)
    df_cleaned[df_cleaned._merge != 'both']

我在迭代数据帧并用‘IDs _ tobe removed’连接它们的步骤中遗漏了一些东西,以便删除具有匹配id的行。此外,我不知道如何存储每一个文件,清理后,到其他文件夹。

感谢任何帮助!

共有1个答案

牟黎昕
2023-03-14

尝试以下方法:

from pathlib import Path

myPath = Path("F:\\Other")
ids_toberemoved = pd.read_csv('F:\\ids.csv', squeeze=True)

res = pd.concatenate([pd.read_csv(f, header=None, names=["ID","val"])
                        .query("ID not in @ids_toberemoved")
                      for f in myPath.glob("*.csv")], 
                     ignore_index=True)

更新:为了清理文件并将它们单独导出为"filename_clean.csv"

_ = [pd.read_csv(f, header=None, names=["ID","val"])
       .query("ID not in @ids_toberemoved")
       .to_csv(f.with_name(f"{f.stem}_clean{f.suffix}"), index=False)
    for f in myPath.glob("*.csv")]
 类似资料:
  • 如何更改下面的代码来查看目录中的所有.log文件,而不是只查看一个文件? 我需要循环遍历所有文件,删除所有不包含“step4”或“step9”的行。目前,这将创建一个新文件,但我不确定如何在这里使用循环(newbie)。

  • 我试图在根目录外的文件夹中保存一个文件,然后读取它的内容。 例如,我的工作目录是/var/www/html/project_folder,我想将文件保存在/var/www/new_folder中 我使用的是Laravel5.2,所以我的根路径是/var/www/html/project\u folder/public 我已授予新文件夹的所有权限。我尝试了$\u SERVER['DOCUMENT\u

  • 问题内容: 我想知道,删除包含所有文件的目录的最简单方法是什么? 我正在删除一个文件夹,但是,如果其中有文件,我将无法删除。 问题答案: 如今至少有两种选择。 在删除文件夹之前,请删除其所有文件和文件夹(这意味着递归!)。这是一个例子: } 如果您使用的是5.2+,则可以使用RecursiveIterator来实现,而无需自己实现递归:

  • 问题内容: 我有一个存储html文件的缓存文件夹。它们在需要时会被覆盖,但是很多时候,很少使用的页面也会被缓存在那里,最终只会占用空间(5周后,驱动器已满了270万个缓存文件)。 循环访问包含数十万个文件的目录并删除早于1天的文件的最佳方法是什么? 问题答案: 我认为您可以通过使用readdir遍历目录并根据时间戳删除来解决此问题: 在将选择的文件超过24小时(24周小时时间每小时3600秒)以上

  • 是否可以基于2个值删除其他图纸上的行?假设我有3张床单。在主工作表(工作表1)中,将有两列:分支和管理器,与其余工作表相同。 这里是电子表格样本。 示例数据: 第1页:(主页) 表2: 表2: 应该做的是: 分支列值不应在所有工作表中重复。因此,我们需要做的是删除工作表2和3上的行,如果分支列与主工作表(表1)相等IF AND ONLY IF如果管理器不相同/相等。因此,在我上面给出的数据中,加州

  • 我的应用程序创建了一个安装程序没有的文件夹,因此我需要弄清楚如何删除这些文件。唯一的问题是卸载程序是以root用户身份运行的。因此,当我尝试使用一个操作清除这些文件并尝试将其指向调用用户(在本例中,它是根用户)时,它会尝试删除目录中的这些附加文件。但是,这些文件被创建并存储在目录中。 我查看了install4j页面,找不到检测调用sudo用户的方法。在shell中,这可以通过调用来实现。是否存在(