从多个压缩文件夹中搜索多个 .csv 文件中的字符串
Posted
技术标签:
【中文标题】从多个压缩文件夹中搜索多个 .csv 文件中的字符串【英文标题】:Search for a string in multiple .csv files from a multiple zipped folders 【发布时间】:2022-01-07 16:54:02 【问题描述】:我正在尝试执行一个脚本,该脚本将解压缩包含多个 txt 和 .csv 文件的压缩文件夹中的所有文件,仅在 .csv 文件中搜索字符串,如果它包含该字符串,则复制整个压缩文件夹到一个新文件夹,如果没有,请转到下一个压缩文件夹。我有几个脚本可以完成其中的一部分,但无法将它们拼凑在一起。我是python的初学者,所以这个脚本看起来很复杂。
这个脚本打印压缩文件夹中的文件,我的下一步是在它包含的 .csv 文件中搜索字符串 PROGRAM 但我不知道如何编码,我想它在最后这段代码,因为它看起来像是在循环中运行。
import os
import pandas as pd
import zipfile
curDir = os.getcwd()
zf = zipfile.ZipFile(curDir + '\namedfile.zip')
text_files = zf.infolist()
list_ = []
print ("Uncompressing and reading data... ")
for text_file in text_files:
print(text_file.filename)
我单独编写了这个脚本,在包含 .csv 文件的文件夹中搜索字符串 PROGRAM
import os
from pathlib import Path
#Searches the .csv files within the "AllCSVFiles"
#folder for the string "GBSD"
search_path = "./AllCSVFiles"
file_type = ".csv"
search_str = "PROGRAM"
if not (search_path.endswith("/") or search_path.endswith("\\") ):
search_path = search_path + "/"
if not os.path.exists(search_path):
search_path ="."
for fname in os.listdir(path=search_path):
if fname.endswith(file_type):
fo = open(search_path + fname)
line = fo.readline()
line_no = 1
while line != '' :
index = line.find(search_str)
if ( index != -1) :
print(fname, "[", line_no, ",", index, "] ", sep="")
line = fo.readline()
line_no += 1
fo.close()
有没有更简单的方法来处理这段代码?
【问题讨论】:
嗨,您也许可以使用zipgrep 或在循环结束时在匹配时复制文件夹。也许将这些方法组合到一个类中,以便更容易执行该过程。 【参考方案1】:我认为首先要确保您了解解决方案的结构。
阅读您的描述,我会说是这样的:
# Create empty list, for marked zip file
# Iterate over zip files
# Unzip
# Iterate over files
# If file ends in .csv
# If file contains SEARCH_STR
# Mark this zip file to be copied
# Stop searching this zip file
# Iterate marked zip files
# Copy zip file to DEST_DIR
如果这是结构,这是否足以帮助您了解代码的放置位置?
之后,您可以清理一下文件中对search_str
的搜索:
with open(search_path + fname) as csv_file:
line_no = 0
for line in csv_file:
line_no += 1
if search_str in line:
search_index = line.index(search_str)
print(f'fname[line_no,search_index]')
# Mark the zip file this csv_file is in
# figure out how to stop searching this zip file
for line in csv_file
:在 Python 中打开的文本文件具有用于迭代行的内置机制
if search_str in line
:如果您不需要知道 search_str 的确切位置,只需测试 membership,search_str
是否在字符串 line
中?
【讨论】:
以上是关于从多个压缩文件夹中搜索多个 .csv 文件中的字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在多个文件中搜索字符串并在 Excel 或 Powershell 中的 csv 中返回带有行号/文本的文件名
如何将包含 30 多个压缩文件的文件夹存储到 r 中的变量中
利用python编程,在多个打包压缩的文件中搜索指定字符串。有很多xml文件