Python作为一种强大的编程语言,不仅在网络编程、数据分析、人工智能等领域发挥着重要作用,还在文件存储与端口检查等日常系统管理任务中表现突出。本文将探讨Python如何高效地用于文件存储与端口检查,并通过实例展示其应用效果。
文件存储与Python
在文件存储方面,Python提供了丰富的库和函数,可以方便地处理文件的创建、读取、写入、删除等操作。同时,Python还支持对文件系统进行遍历,从而获取指定目录下的所有文件和文件夹信息。
1. 获取当前工作目录与列出目录内容
使用Python进行文件操作前,通常需要了解当前的工作目录。os.getcwd()
函数可以返回当前工作目录的路径。而os.listdir()
函数则可以列出指定目录(默认为当前目录)中的所有文件和文件夹名称。
|
import os |
|
|
|
# 获取当前工作目录 |
|
current_directory = os.getcwd() |
|
print("当前工作目录:", current_directory) |
|
|
|
# 列出当前目录中的所有文件和文件夹 |
|
files_and_folders = os.listdir() |
|
print("当前目录中的文件和文件夹:", files_and_folders) |
2. 检查文件是否存在
在进行文件写入或读取操作前,检查文件是否存在是一个好习惯。Python提供了os.path.exists()
函数来实现这一功能。如果文件或目录存在,该函数返回True
,否则返回False
。
|
file_path = "my_data/my_file.txt" |
|
if os.path.exists(file_path): |
|
print("文件存在") |
|
else: |
|
print("文件不存在") |
此外,pathlib
库也提供了更现代和面向对象的方法,使用Path.exists()
方法可以更直观地检查文件路径。
|
from pathlib import Path |
|
|
|
file_path = Path("my_data/my_file.txt") |
|
if file_path.exists(): |
|
print("文件存在") |
|
else: |
|
print("文件不存在") |
3. 文件读写操作
Python的内置open()
函数可以用于打开文件,并进行读写操作。通过with
语句可以确保文件在读写操作完成后被正确关闭。
|
# 写入文件 |
|
with open("my_data/my_file.txt", "w") as file: |
|
file.write("Hello, World!") |
|
|
|
# 读取文件 |
|
with open("my_data/my_file.txt", "r") as file: |
|
content = file.read() |
|
print("文件内容:", content) |
端口检查与Python
在网络编程和系统管理中,端口检查是一个常见的任务。Python提供了多种方法来检查端口的占用情况,包括使用socket
模块、psutil
库以及netifaces
模块。
1. 使用socket
模块检查端口
socket
模块是Python标准库的一部分,可以用于创建套接字,进而检查端口是否被占用。
|
import socket |
|
|
|
def check_port(port): |
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: |
|
try: |
|
s.bind(("", port)) |
|
print(f"Port {port} is available.") |
|
except socket.error as e: |
|
print(f"Port {port} is in use: {e}") |
|
|
|
check_port(8080) |
2. 使用psutil
库查看端口使用情况
psutil
是一个跨平台库,用于访问系统和进程信息。它可以列出所有活动的网络连接和端口使用情况。
|
import psutil |
|
|
|
def list_ports(): |
|
for conn in psutil.net_connections(): |
|
print(f"{conn.laddr.ip}:{conn.laddr.port} -> {conn.raddr.ip}:{conn.raddr.port}") |
|
|
|
list_ports() |
3. 使用netifaces
模块列出网络接口及其配置
netifaces
模块可以列出所有网络接口及其配置,包括IP地址和端口使用情况。
|
import netifaces |
|
|
|
def list_interfaces(): |
|
for interface in netifaces.interfaces(): |
|
print(f"Interface: {interface}") |
|
addrs = netifaces.ifaddresses(interface) |
|
for addr in addrs[netifaces.AF_INET]: |
|
print(f" IP: {addr['addr']}") |
|
for conn in psutil.net_connections(kind='inet'): |
|
if conn.laddr.ip == addr['addr']: |
|
print(f" Port: {conn.laddr.port}") |
|
|
|
list_interfaces() |
应用实例:网络爬虫与数据存储
以网络爬虫为例,Python的Scrapy框架可以方便地爬取网页数据,并将数据存储到文件中。下面是一个简单的示例,展示了如何使用Scrapy爬取新浪新闻,并将数据保存到TXT文件中。
- 创建Scrapy项目:
|
scrapy startproject newsSpider |
- 在Spider文件中编写爬虫逻辑,遍历新闻分类并抓取子链接,然后将抓取的内容保存到TXT文件。
|
# -*- coding: utf-8 -*- |
|
import os |
|
import scrapy |
|
from newsSpider.items import NewsspiderItem |
|
|
|
class newsSpider(scrapy.Spider): |
|
name = 'news' |
|
allowed_domains = ['sina.com.cn'] |
|
start_urls = ['news.sina.com.cn/guide/'] |
|
|
|
def parse(self, response): |
|
for each in response.xpath("//div[@id='tab01']/div[@data-sudaclick!='citynav']"): |
|
parentUrl = each.xpath('./h3/a/@href').extract()[0] |
|
parentTitle = each.xpath('./h3/a/text()').extract()[0] |
|
parentpath = './data/' + parentTitle |
|
if not os.path.exists(parentpath): |
|
os.makedirs(parentpath) |
|
with open(os.path.join(parentpath, "news.txt"), "a", encoding="utf-8") as file: |
|
# 这里可以添加抓取的具体内容,并写入文件 |
|
file.write(f"Title: {parentTitle}\n") |
在这个示例中,爬虫遍历新浪新闻的分类页面,并创建相应的文件夹存储每个分类的新闻标题。实际使用时,可以在parse
方法中添加更多的解析逻辑,将完整的新闻内容保存到文件中。
结语
Python凭借其强大的库和函数,在文件存储与端口检查等系统管理任务中展现出了出色的能力。通过合理地使用这些工具和方法,可以有效地提高任务执行的效率和准确性。无论是在数据存储、网络编程还是系统管理等领域,Python都是一个值得信赖的选择。