【问题标题】:Fixing File path with user input to create search for file function使用用户输入修复文件路径以创建文件搜索功能
【发布时间】:2022-01-17 00:47:05
【问题描述】:

我有一堆名为 (modelnumber)_filter 的 CSV 文件。系统会询问用户他们正在搜索的型号,所以
示例用户输入:“1.3C-H4SL-D1” 那么文件路径将被加载:

“C:\Users\ADMIN-SURV\Desktop\data_pull\1.3C-H4SL-D1_filter.csv”

EX CSV

"Search Results"

"Summary"
"Saved on","12/10/2021 1:36:26 PM"
"Searched for","Avigilon (ONVIF) 2.0C-H5A-D1"
"In document","C:\Users\ADMIN-SURV\Desktop\data_pull\my.pdf"
"Number of document(s) found","1"              
"Number of instance(s) found","18"             

"File name","Title","Page","Search Instance"
"IslandView.pdf","","33","H5A-D1(3022506) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:692 192.168.50.189 "
"IslandView.pdf","","55","H5A-D1(3022509) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:657 192.168.60.243 "
"IslandView.pdf","","55","H5A-D1(3022547) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:469 192.168.60.248 "
"IslandView.pdf","","55","H5A-D1(3022533) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:700 192.168.50.190 "
"IslandView.pdf","","87","104 RIGHT ENTRY Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.90.212 00:18:85:"
"IslandView.pdf","","87","101 LEFT ENTRY Avigilon (ONVIF) 2.0C-H5A-D1 192.168.50.243 00:18:85:2E:"
"IslandView.pdf","","87","H5A-D1(3022627) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:55 192.168.60.249 "
"IslandView.pdf","","88","H5A-D1(3669534) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown Logical ID:463 192.168.18.202 "
"IslandView.pdf","","94","103 LEFT ENTRY Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.60.245 00:18:85:"
"IslandView.pdf","","146","104 RIGHT ENTRY Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.90.212 00:18:85:"
"IslandView.pdf","","201","H5A-D1(3022509) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.60.243 00:18:85:"
"IslandView.pdf","","201","H5A-D1(3022506) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.50.189 00:18:85:"
"IslandView.pdf","","201","H5A-D1(3022533) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.50.190 00:18:85:"
"IslandView.pdf","","201","H5A-D1(3022547) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.60.248 00:18:85:"
"IslandView.pdf","","201","101 LEFT ENTRY Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.50.243 00:18:85:"
"IslandView.pdf","","201","H5A-D1(3022622) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.60.245 00:18:85:"
"IslandView.pdf","","202","H5A-D1(3022627) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.60.249 00:18:85:"
"IslandView.pdf","","203","H5A-D1(3669534) Avigilon (ONVIF) 2.0C-H5A-D1 Unknown 192.168.18.202 00:18:85:"

然后,还将使用该输入创建一个新文件:

“C:\Users\ADMIN-SURV\Desktop\data_pull\1.3C-H4SL-D1.txt”

这是我的代码。

import csv
import re
import sys

new_file = input("What is the camera model? **Use Exact Casing and Symbols**")
file_path = "C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\filter_results\\"
end_path = file_path + new_file + ".txt"
print(end_path)

sys.stdout = open(end_path, 'x')
with open("C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\" + new_file + "_filter.csv") as fid:
    print(fid)
    input_file = csv.reader(fid)
    for row in input_file:
        if len(row) >= 4:
            if row[0] == 'File name':
                # skip the header row
                continue
            # m = re.match(r".*(.* [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})", row[3])
            m = re.match(r'.*(.* [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})', row[3])
            if m:
                print(m.group(1))
            else:
                print(row[3])

sys.stdout.close()


到目前为止,当我运行此代码时,我收到以下错误

Traceback(最近一次调用最后一次): 文件“C:\Users\ADMIN-SURV\PycharmProjects\pdf_scraping\test_file.,py”,第 28 行,在 使用 open("C:\Users\ADMIN-SURV\Desktop\data_pull\" + new_file + "_filter.csv") 作为fid: FileNotFoundError:[Errno 2] 没有这样的文件或目录:'C:\Users\ADMIN-SURV\Desktop\data_pull\1.3C-H4SL-D1_filter.csv'

CSV 文件已经存在,应该可以通过用户输入找到。 应使用用户输入创建 .TXT 文件。

【问题讨论】:

  • 您正在使用/运行的确切 Python 版本是什么?
  • @MaXiMkA Python 3.10.0
  • 我复制了你的代码示例,有 26 行。您的错误是第 28 行。顺便说一句,它在 3.8.0 上使用虚拟 .csv 执行
  • @MaXiMkA 是的,我从这里的代码中删除了一些行,因为它有很多 cmets。什么是虚拟 csv 文件?它应该只在已经存在的情况下才有效。
  • 你没有提到 .csv 文件的内容,所以我在前 2 列中创建了一个 1,2,3,4 和 a,b,c,d 的虚拟文件。

标签: python python-3.x csv automation


【解决方案1】:

使用 Python 3.8.0 运行它,结果是 ../filter_results 中没有扩展名的文件。我将其更改为 .txt,这是它的内容:

<_io.textiowrapper name="C:\Users\maxim\PycharmProjects\FB_Books\data_pull\1.3C-H4SL-D1_filter.csv" mode="r" encoding="cp1252">

【讨论】:

  • 我不太关注
【解决方案2】:

你得到的原因

&lt;_io.TextIOWrapper name='C:\Users\maxim\PycharmProjects\FB_Books\data_pull\1.3C-H4SL-D1_filter.csv' mode='r' encoding='cp1252'&gt;

是因为sys.stdout = open(end_path, 'x')

open(end_path, 'x') 返回

&lt;_io.TextIOWrapper name='C:\Users\maxim\PycharmProjects\FB_Books\data_pull\1.3C-H4SL-D1_filter.csv' mode='r' encoding='cp1252'&gt;

所以我们要稍微清理一下逻辑。我们将使用'x'参数打开新文件(意味着如果没有创建文件,它将创建并写入。但是,如果它已经创建,则不允许打开和覆盖它)

然后使用您的逻辑,我们将 ip 地址写入该文件。

import csv
import re
import sys

new_file = input("What is the camera model? **Use Exact Casing and Symbols**")
file_path = "C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\filter_results\\"
end_path = file_path + new_file + ".txt"
print(end_path)

output_txt_file = open(end_path, 'x')
with open("C:\\Users\\ADMIN-SURV\\Desktop\\data_pull\\" + new_file + "_filter.csv") as fid:
    print(fid)
    input_file = csv.reader(fid)
    for row in input_file:
        if len(row) >= 4:
            if row[0] == 'File name':
                # skip the header row
                continue
            # m = re.match(r".*(.* [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})", row[3])
            m = re.match(r'.*(.* [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})', row[3])
            if m:
                print(m.group(1).strip())
                output_txt_file.write(m.group(1).strip() + '\n')
                
            else:
                print(row[3])

output_txt_file.close()

【讨论】:

  • 这很有效,谢谢!通过电子邮件发送进一步的通信
  • 如何从这一行中提取整数“481”并打印它而不是整个字符串? “检测:不支持 481 1.3C-H4SL-D1(1866954) Avigilon (ONVIF) 1.3C-H4SL-D1 Unknown” 每一行都有不同的数字,而不是所有的“481”,所以代码会有能够提取的不仅仅是“481”
  • 感谢您的澄清。感觉end_path属性不对,但是没时间进一步调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2019-03-21
  • 2017-04-14
  • 1970-01-01
  • 2017-04-16
相关资源
最近更新 更多