如何从两个文件夹中读取文件并避免在 Python 中重复

     2023-03-17     14

关键词:

【中文标题】如何从两个文件夹中读取文件并避免在 Python 中重复【英文标题】:How to read files from two folders and avoid duplicates in Python 【发布时间】:2018-11-09 21:48:32 【问题描述】:

我有以下文件夹,我从中读取 SQL 文件并将它们保存为变量:

++folder1
  -1.sql
  -2.sql
  -3.sql
++folder2
  -2.sql

以下代码可以很好地处理单个文件夹。我如何修改此代码以不仅从一个文件夹中读取,而且从两个文件夹中读取,如果文件存在于文件夹 2 中,则不要从文件夹 1 中读取同名文件?

folder1 = '../folder1/'
for filename in os.listdir(folder1):
    path = os.path.join(folder1, filename)
    if os.path.isdir(path):
        continue
    with open(folder1 + filename, 'r') as myfile:
        data = myfile.read()
    query_name = filename.replace(".sql", "")
    exec (query_name + " = data")

【问题讨论】:

附带说明,像这样动态创建一堆变量几乎总是一个非常糟糕的主意,使用exec 而不是globalssetattr 是一个更糟糕的主意.将所有内容存储在例如字典中通常会更好。 另外,请注意您正在使用path = os.path.join(folder1, filename),然后在几行之后使用folder1 + filename 而不是仅仅使用path 【参考方案1】:

您可以尝试以下方法:

folders = ['../folder2/','../folder1/']
checked =[]
for folder in folders:
    for filename in os.listdir(folder):
        if filename not in checked:
            checked.append(filename)
            path = os.path.join(folder, filename)
            if os.path.isdir(path):
                continue
            with open(folder + filename, 'r') as myfile:
                data = myfile.read()
            query_name = filename.replace(".sql", "")
            exec (query_name + " = data")

【讨论】:

首先,这与 OP 的要求相反。其次,当它的唯一用途是检查成员资格时,为什么要使用列表而不是集合? 你的意思是相反的?无论是列表还是设置都没有关系,它仅用于检查重复的文件名。 “如果文件夹 2 中存在文件,则不要从文件夹 1 中读取同名文件的规则”。您的代码将读取文件夹 1 中的文件,然后跳过文件夹 2 中的文件。 是的,这就是 OP 的要求。他想避免重复文件。 OP 要求不要从文件夹 1 中读取同名文件,只读取文件夹 2 中的文件。您的代码读取文件夹 1 中的文件,但不读取文件夹 2 中的文件.这不是一回事,恰恰相反。【参考方案2】:

这个问题的答案很简单:调用两次listdir,然后跳过文件夹 1 中同时位于文件夹 2 中的文件。

一种方法是使用集合操作:集合差异a - b 表示a 中不在b 中的所有元素,这正是您想要的。

files1 = set(os.listdir(folder1))
files2 = set(os.listdir(folder2))
files1 -= files2

paths1 = [os.path.join(folder1, file) for file in files1]
paths2 = [os.path.join(folder2, file) for file in files2]
for path in paths1 + paths2:
    if os.path.isdir(path):
        # etc.

附带说明一下,像这样动态创建一堆变量几乎总是一个非常糟糕的主意,使用exec 而不是globalssetattr 是一个更糟糕的主意。将所有内容存储在例如字典中通常会更好。例如:

queries = 
for path in paths1 + paths2:
    if os.path.isdir(path):
        continue
    name = os.path.splitext(os.path.basename(path))[0]
    with open(path) as f:
        queries[name] = f.read()

【讨论】:

如果我保持初始方法并使用您建议的代码的第一部分,我不需要更改初始代码的第 6 行吗? with open(folder1 + filename, 'r') as myfile: @sprogisd 更简单地说,就是open(path)。正如我对您的问题所评论的那样,您已经使用 os.join 创建了该路径,那么为什么不直接使用该路径而不是以不同的方式重新创建相同的字符串呢? 那么with open(path, 'r') as myfile:? 我假设我应该在第 8 行之前添加这行代码:'filename = path.split("/")[-1].并将os.join 替换为os.path.join。我说的对吗? @sprogissd 我修复了os.path.join(感谢您的关注)。但与此同时,您可能应该使用os.path.split(path) 而不是path.split('/'),但是,是的,这会起作用。或者,如果您愿意,您可以在列表中存储一对(路径,文件)值,而不仅仅是路径。

Python:如何从压缩的 json .gz 文件中读取并写入 json 文件

】Python:如何从压缩的json.gz文件中读取并写入json文件【英文标题】:Python:Howtoreadfromcompressedjson.gzfileandwritetojsonfile【发布时间】:2021-12-1517:06:58【问题描述】:我想从压缩的.json.gz文件中读取并将其解码后的文件写入.json文件.jso... 查看详情

在 python 中读取文本文件并从中创建两个列表

】在python中读取文本文件并从中创建两个列表【英文标题】:Readingatextfileinnpythonandcreatingtwolistsoutofit【发布时间】:2020-01-3017:10:37【问题描述】:我有一个文本文件,其中包含对话内容第1个人:“引用”人2:"quotes2"...人1:“引... 查看详情

如何逐行读取文本文件并从文件内容中返回两个字符串和一个列表?

】如何逐行读取文本文件并从文件内容中返回两个字符串和一个列表?【英文标题】:HowdoIreadatextfilelinebylineandreturntwostringsandalistfromthecontentsofthefile?【发布时间】:2022-01-0319:12:08【问题描述】:因为我想同时将文本文件读入字符... 查看详情

如何使用 Python 在 myBucket 中上传 CSV 文件并在 S3 AWS 中读取文件

】如何使用Python在myBucket中上传CSV文件并在S3AWS中读取文件【英文标题】:HowdoIuploadaCSVfileinmyBucketandReadFileinS3AWSusingPython【发布时间】:2017-04-0418:10:57【问题描述】:如何将CSV文件从本地计算机上传到我的AWSS3存储桶并读取该CSV文... 查看详情

Python:如何从内存中的 zip 文件中读取图像?

】Python:如何从内存中的zip文件中读取图像?【英文标题】:Python:Howtoreadimagesfromzipfileinmemory?【发布时间】:2015-08-0222:15:55【问题描述】:我看到了这个问题的变体,但不是在这个确切的上下文中。我拥有的是一个名为100-Test.zip... 查看详情

如何从 csv 文件中读取日期/时间字段并在 python 中相应地绘制图表

】如何从csv文件中读取日期/时间字段并在python中相应地绘制图表【英文标题】:Howtoreadthedate/timefieldfromthecsvfileandplotagraphaccordinglyinpython【发布时间】:2011-06-2622:26:03【问题描述】:我正在使用pythoncsv模块从CSV文件中导入记录。... 查看详情

从文本文件中读取句子并使用 Python 3 附加到列表中 [关闭]

...发布时间】:2015-01-2807:55:26【问题描述】:我无法弄清楚如何获取一个冗长文档的文本文件,并将该文本文件中的每个句子附加到一个列表中。并非所有句子都以句号结尾,因此必须考虑所有结尾字符,但也可能有一个“。”在 查看详情

如何在 Python3 中读取 VSAM 文件

】如何在Python3中读取VSAM文件【英文标题】:HowtoreadVSAMfileinPython3【发布时间】:2019-02-2804:48:22【问题描述】:我在unix系统中有VSAM文件。我想在python中使用该文件的布局来读取该文件。从.idx和.dta中,我将.dta复制到我的本地计算... 查看详情

Python 从文件中读取并保存到 utf-8

】Python从文件中读取并保存到utf-8【英文标题】:Pythonreadingfromafileandsavingtoutf-8【发布时间】:2013-11-0416:00:44【问题描述】:我在读取文件、处理字符串和保存到UTF-8文件时遇到问题。代码如下:try:filehandle=open(filename,"r")except:print... 查看详情

python如何从文件读取数据

...它会先在当前目录下进行检索,有时候我们需要读取其他文件夹中的路径,例如:现在文件PI_DESC.txt存储在python目录的子文件夹txt中那么我们读取文本内容的代码得修改为:withopen("txt\\PI_DESC.txt")asfile_object:contents=file_object.... 查看详情

如何从文件中读取原始文件并在 String.format 中使用

】如何从文件中读取原始文件并在String.format中使用【英文标题】:howtoreadfromfilerawanduseinString.format【发布时间】:2018-01-1321:51:51【问题描述】:我想从原始文件中读取数据并替换文本中的格式。例如...在这样的原始文件中:hello0... 查看详情

如何从 Azure DevOps Pipeline 读取 Azure 文件共享文件

】如何从AzureDevOpsPipeline读取Azure文件共享文件【英文标题】:HowtoReadAzureFileShareFilesfromAzureDevOpsPipeline【发布时间】:2020-11-0609:24:30【问题描述】:我目前已经创建了一个Azure存储帐户。在这个存储中,我创建了两个文件共享。我... 查看详情

如何循环 python 读取一组 HTML 文件并转储到 JSON

】如何循环python读取一组HTML文件并转储到JSON【英文标题】:HowtolooppythontoreadasetofHTMLfilesanddumpintoJSON【发布时间】:2014-06-1119:37:36【问题描述】:我有一个程序可以从一组20个html文件中提取某些变量。有人可以给我建议如何循环... 查看详情

如何从流中读取 CSV 文件并在写入时处理每一行?

】如何从流中读取CSV文件并在写入时处理每一行?【英文标题】:HowtoreadaCSVfilefromastreamandprocesseachlineasitiswritten?【发布时间】:2011-09-2705:13:26【问题描述】:我想从标准输入中读取一个CSV文件并处理每一行。我的CSV输出代码一一... 查看详情

仅在使用python更新后如何从输入文件中读取文本

】仅在使用python更新后如何从输入文件中读取文本【英文标题】:Howtoreadatextfrominputfileonlyafteritisupdatedusingpython【发布时间】:2011-05-1407:47:48【问题描述】:实际上我会将来自我的application1的输入提供给input.txt,实习生会触发usedp... 查看详情

java示例代码_在java中,如何从输入流中读取固定长度并保存为文件

java示例代码_在java中,如何从输入流中读取固定长度并保存为文件 查看详情

如何从文本文件中读取数据库凭据?

】如何从文本文件中读取数据库凭据?【英文标题】:HowcanIreadindatabasecredentialsfromatextfile?【发布时间】:2019-05-1403:50:25【问题描述】:如何从Python脚本中的文本文件中读取数据库凭据?当Grafana搜索目标时,它应该转到文本文件... 查看详情

如何使用python脚本从pdf中读取阿拉伯语文本(代码片段)

...现问题。我知道错误是在编码和编码过程中,但我不知道如何解决它。系统转换阿拉伯语PDF文件,但文本文件为空。并显示此错误:回溯(最近一次调用最后一次):文件“C:Users estDownloadspdf-txt extmaker.py”,第68行,在f.write(... 查看详情