python写入文件文件怎么通过域

Python判断文件/目录存在的方法
使用 os 模块
判断文件是否存在
os.path.isfile(path)
判断目录是否存在
os.path.ir(path)
判断文件是否存在
# 使用 path 模块os.path.exists(path)# 使用 access() 方法os.access(path, os.F_OK)
使用 open 函数和异常捕获
如果直接用&open()&函数打开一个不存在的文件时,程序会抛出异常,我们可以通过 try 语句来捕获异常以达到判断文件是否存在的目的。
如果文件不存在,open() 函数会抛出&FileNotFoundError&异常。如果文件无操作权限,则会抛出&PemissionError&异常。
filePath = '/path/to/file'try: & &file = open(filePath) & &file.close()except FileNotFoundError: & &print(&No such file or directory: '%s'& % filePath)except IsrectoryError: & &print(&Is a directory: '%s'& % filePath)except PermissionError: & &print(&Permission denied: '%s'& % filePath)else: & &print(&File is exist: '%s'& % filePath)
使用 pathlib 模块
import pathlibpath = pathlib.Path('path/to/file')# 判断路径是否存在path.exists()# 判断是否为文件path.is_file()# 判断是否为目录path.is_dir()
原文标题:Python 判断文件/目录是否存在
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先
特征构造是一个非常耗时的过程,因为每个新特征都需要经过几个步骤去构造,特别是那些需要用到多张表信息的....
用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过....
MicroPython在2014成功的在kickstarter上众筹,获得很高的评价,现在越来越多的....
给定一个包含多个元素的list,让你查找其中出现次数最多的元素,你会怎么做?在下图中,我们介绍了两种....
给定一个包含多个元素的list,让你查找其中出现次数最多的元素,你会怎么做?在下图中,我们介绍了两种....
TIOBE 8 月编程语言指数排行榜已经公布了。TIOBE 刚刚发布了 8 月编程语言排行榜,排名前....
Ganssle的想法也可能是错的。虽然IEEE的调查并未另外分出Windows app,但它区分出行....
MicroPython准备工作:1.& &&&下载rt_thread源码:见附件链接2.& &&&下载ENV工具...
python的语法简洁清晰,语法接近英语,python简单的语法可以让初学者专注于思考要做的事情,而....
当你定义的类中一个实例调用了unicode(),用于给它定义行为。unicode()像是str(),....
计算机视觉是一门用计算机模拟生物视觉的学科,更具体地讲,就是让计算机代替人眼实现对目标的识别、分类、....
自然语言处理(Natural Language Processing,NLP)是人工智能的子领域之一....
蔚来资本管理合伙人朱岩说,尽管如此,蔚来资本仍然会非常谨慎地投资电动汽车初创企业。他称,这家总部位于....
总有传说中年薪几百万的程序员,但现实中大部分程序员的薪资,其实都说高不高说低不低,做技术也会有自己的....
an Rossum:我认为不至于。Python 社区非常健康,Python 核心团队非常强大且充满活....
本书旨在让你成为优秀的程序员,具体地说,是优秀的Python程序员。通过阅读本书,你将迅速掌握编程概....
吃饭的时候会见到很多奇怪的菜名,很多店常常会取一些奇怪的名字来吸引眼球,吃饭的时候基本靠猜,或者……....
在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字....
近日,想必各位科技爱好者的朋友圈都被一篇发表在第25届IEEE国际讨论会上,用Python开发FPG....
在让大众自由掌控 PC 强大功能的革命中,Raspberry Pi 是核心,为我们提供了一个具有广泛....
Python软件实现和FPGA性能潜力的结合是一个非常有意义的工作,将会开创出一个类似于树莓派和Ar....
在2017年“中国互联网企业100 强”的数据中显示,大数据、游戏以及人工智能等相关企业占比近80%....
Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出....
其次,在排行前十的编程语言排行榜中,R语言的排名逐年小幅下滑,反面衬托了Python 越来越受欢迎。....
综述,机器学习的自学简单来说分为三个步骤
前期:知识储备包括数学知识,机器学习经典算法知识,编程技....
当我们对一个系统进行渗透时,如果你忽略了防火墙的存在,那么就会为我们的测试带来诸多的麻烦。因此在开始....
IEEE Spectrum发布了最新的第五届年度编程语言交互排行榜!Python不但雄踞第一,在综合....
本书没有从理论角度来揭示机器学习算法背后的数学原理,而是通过“原理简述+问题实例+ 实际代码+运行效....
本书是计算机视觉编程的权威实践指南,依赖Python 语言讲解了基础理论与算法,并通过大量示例细致分....
虽然我们的图像目前是RBG格式,但是我们应该探索在不同的颜色空间,如HSL或HSV中进行可视化,看看....
万万没想到,在工程师的手中,我们可以用机器学习搭建自己的音以决策树为例,这是一种常见的机器学习算法,....
这篇小文将告诉你:Softmax是如何把CNN的输出转变成概率,以及交叉熵是如何为优化过程提供度量,....
TensorFlow 是一款用于数值计算的强大的开源软件库,特别适用于大规模机器学习的微调。 它的基....
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它....
令开发者万分高兴的是,开发自己的测试框架的日子终于结束了。以前,开发团队接手一个项目并开始开发时,除....
在我看来,对于Numpy以及Matplotlib,Pandas可以帮助创建一个非常牢固的用于数据挖掘....
用Python完成项目,编写的代码量更少,代码简短可读性强,团队协作开发时读别人的代码速度会非常快,使工作变得更加高效。优雅做...
取决于具体的业务问题,你需要决定这是一个多元分类问题,还是一个二元分类问题。如果是二元分类问题,那么....
说到 DataFrame,可能大家更熟悉的是R语言中的 data.frame,Python中的 Da....
make(fit=True):当fit参数为真或者没有给出version参数时,将会调用bestfi....
1、搭建环境
下载msys2,安装完更新下。具体操作可以百度。记住安装位置,我是直接安装到D盘根目录。
下载gcc-arm-none-eabi,...
在编程语言中, Python 长期稳居前五,不仅已经成为数据分析、人工智能领域必不可少的工具,还被越....
然后,我们可以将矩形列表存储在这种结构的 C 数组中,并将这个数组传递给我们的 check_rect....
NumPy的常用数学和统计分析的函数非常多,如果我们一个一个的分散来讲,一来非常枯燥,二来呢也记不住....
摘要: 阿里云ECS机型众多,规格族及规格繁多。对于选购资源,我们主要关心云服务器的配置、带宽资源及....
BeagleBone 属于开源单板计算机 (SBC),可与其它上百种与之类似的 SBC 共享各种设计....
Van Rossum说,作为一个普通的核心开发人员,他将会在“一段时间内”坚持下去,但他留给社区来决....
本文对Go和Python、Erlang做了一些有趣的分析对比,相信大家能从中感受到Go语言的强大和与....
谈到在web应用领域,除了Python的语法,Django是Python后台一个最重要的框架,那么,什么是软件框架呢?举个简单的例子,对于...
ElasticSearch(ES)是一个建立在Apache Lucene之上的高度可用的分布式开源搜....
AutoGraph不仅仅是一组有用的宏指令(macro); 它涵盖Python语言的任何部分(利用源....
我已经尝试过,用OPENMV直接发送一给串口助手,串口助手可以接受到,用STM32自己的TX给RX写信息,改变某一引脚的电...
& && &函数是Python技术学习中重要的一个环节,深入掌握该阶段的知识内容,对于Python技术能力的提升非常...
Face ID 的兴起带动了一波面部识别技术热潮。本文将介绍如何使用 OpenCV、Python 和....
近几年各种深度学习框架涌现,大家可能很难从众多的深度学习框架中选择一个合适的框架进行学习。对于深度学习的初学者,或者觉得...
这听起来非常聪明,但作者实际上提出的是该领域任何一名从业者都认为是理所当然的东西——添加一个更适合解....
在让大众自由掌控 PC 强大功能的革命中,Raspberry Pi 是核心,为我们提供了一个具有广泛....
昨天,Python 之父 Guido van Rossum 在 Python 邮件组里发邮称,他将退出 Python 核心决策层,而转居幕后。
Python 被抛...
# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets
from PyQt5.QtGui import QFont,QIcon#QtWi...
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-1个月前 (07-16)
对于很多Python这门编程语言的初学者,往往会面临以下问题:
Python2和Python3我该学习哪一个?
是否要安装Linux系统学习Python?
Python3有各种版本我该安装哪一个?
那么多的图书、视频和电子教程我该选择哪一个?
在Django项目中使用MySQL数据库时,我们需要安装mysqlclient才能够正常使用。
一般来说,通过pip命令安装即可。
安装命令:
pip install mysqlclient
但是,可能会出现这样的错误。
Cannot open in...
2周前 (08-06)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
在这一篇文章中,我们主要学习以下内容:
作用域的作用是什么?如何在带有符号表的代码中实现?
什么是嵌套作用域?如何使用链式作用域符号表...
3周前 (07-31)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
在这个系列文章的最后四篇(第14-17部分)文章中,我们将学习到以下内容:
第14部分:嵌套作用域(Nested scopes)
3周前 (07-27)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
“Be not af be afraid only of standing still.” &...
4周前 (07-26)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
通过前面的学习,我们了解了以下内容:
1、 如何把语句分解为记号。
这个过程叫做词法分析(lexical analysis)。
解释器的...
4周前 (07-25)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
还记得在第7部分提到的最终目标吗?
实现一个Pascal编程语言子集的全功能解释器。
这一篇文章,我们将朝着我们的最终目标更进一步。
1个月前 (07-13)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
这篇文章,我们真正开始实现对Pascal语言所编写的程序代码进行解释的功能。
相对于之前的命令行解释器,这是一个相当大的跳跃。
不过,不...
1个月前 (07-11)
本系列文章参考国外编程高手鲁斯兰的博客文章《Let’s Build A Simple Interpreter》。
本篇文章所实现的功能是在《一起来写一个简单的解释器(7)》的基础之上进行扩展,如果还没有掌握之前的知识内容,请先做复习。
以下,是我们即...
1个月前 (07-11)
《Python3萌新入门笔记》中,我们看到了使用“%”和“format()”进行字符串格式化的操作。
在Python3.6中,又出现的一种新的格式化字符串的方法:f-string。
f-string是指以“F”或“f”为前缀的字符串。
使用方法很简单...python socket局域网聊天与文件传输 - Python源码 - 网络编程 - 源码天空
> 网络编程 > python socket局域网聊天与文件传输
&热门Python源码
python socket局域网聊天与文件传输
资源等级:
上传会员:
资源类别:
¦网络编程
文件大小:
原创作者:
发布时间:
网友评分:
2.8分 / 5次
下载次数:
python&socket局域网聊天文件传输程序
界面用wxPython编写,实现多线程
跨平台,windows和linux下过行都可
&&网友评论(共有18条)
&刚刚学习python
kabitu, 10:12:26
&试试wxFormular
wulien, 21:43:51
liutian-18 16:46:39
&hope it can help to me!
bpeng-30 04:37:06
pythonwu, 20:21:32
&very good!nice code~ so cool
zodiac518, 23:05:10
minglove, 09:01:21
&为什么下载不了,为什么,为什么
minglove, 09:07:46
&。。。。。。。。。。。。。。。
minglove, 09:08:04
jt326, 11:37:53
&什么啊,哪里下载?再弹一次
Nigu, 16:55:18
Nigu, 16:55:41
&dsfsdfsdfsdfsdfsdf
yqtyqt, 18:49:24
&下载学习一下
luban100, 18:57:54
&看看怎么样
a17-12-23 17:54:45
&谢谢,楼主发布的代码。学习了。
bglg-22 11:18:22
&谢谢楼主,学习学习。
bglg-22 11:19:39
&支持,支持
vae-04 23:39:01
&&→&发表我的评论:
*字数限制500个字符(一个汉字占三个字符)
QQ技术交流群:编程乐园
(VB交流群) 3326898(Delphi交流群) (VC交流群)
版权所有 &
保留所有权力一、文件操作
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
打开一个文件用于读写。文件指针将会放在文件的开头。
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
  打开文件
  假设我们有一个file.txt文件,内容为:
abcdefgjijklmn opqtsruvwxyz
# Author:Tim Gu
data = open('file.txt',encoding="utf-8").read()
print(data)
  读文件:
# Author:Tim Gu
f = open('file.txt','r',encoding='utf-8')
data = f.read()
print(data)
  写文件:
f = open('file.txt2','w',encoding='utf-8') #文件句柄,使用w时事实上是创建了一个新文件,如果源文件存在,会覆盖
f.write("I will go home!")
f.write('\nByeBye!')
f.write('\nadfas')
  追加文件:
f = open('file.txt2','a',encoding='utf-8') #文件句柄
f.write("See you,tomorrow!")
  打开文件file.txt2
I will go home!ByeBye!adfasSee you,tomorrow!  以行读取文件:
# Author:Tim Gu
f = open('file.txt2','r',encoding='utf-8') #文件句柄
print(f.readline())
for i in range(2):
#使用for循环读取2行
print(f.readline())
  使用readline()读取的是文件的单行,readlines()会读取文件全部行,每行作为一个元素形成一个列表。readlines()因为会一下子把文件全部读取到内存,所以只适合读小文件。
  下面示例读取文件,但不读取第10行:
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8') #文件句柄
#print(f.readlines())
for index,line in enumerate(f.readlines()): #使用遍历读取文件
if index == 9:
print('------------------我是分割线-------------------')
print(line.strip())
  输出:
从前现在过去了再不来
红红落叶长埋尘土内
开始终结总是没变改
天边的你飘泊白云外
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
情人别后永远再不来(消散的情缘)
------------------我是分割线-------------------
鲜花虽会凋谢(只愿)
但会再开(为你)
一生所爱隐约(守候)
在白云外(期待)
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
  处理大文件的方法:这行代码的效果和上面的一样,只是使用了迭代器,使得内存可以只保留一行
f = open('file3.txt','r',encoding='utf-8') #文件句柄
for line in f: #一行行读取文件,内存中只保留一行。
if count == 9:
print('------------我是分割线---------------')
count += 1
print(line.strip())
count += 1
  光标处理:seek()用法
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8') #文件句柄
print(f.tell()) #读取光标坐在位置
print(f.readline()) #读取一行
print(f.readline()) #读取第二行
print(f.readline()) #读取第三行
print(f.tell()) #打印光标所在位置
f.seek(0) #使光标回到原点
print(f.tell()) #打印光标位置
从前现在过去了再不来
红红落叶长埋尘土内
开始终结总是没变改
  flush()实时将数据写入磁盘
  打印进度条的小方法: 
# Author:Tim Gu
import sys,time
for i in range(20):
sys.stdout.write("#")
#sys.stdout方法在同一行打印
sys.stdout.flush()
#每打印一个#符号写入一次
time.sleep(0.3)
#每打印一次隔0.3秒
####################
  truncate() 截断文件,可以清空文件
# Author:Tim Gu
f = open('file.txt','a',encoding='utf-8')
f.truncate(10)
#保留文件前10个字符,其余截断
  文件的模式:r+读写模式:这段代码会先读取3行,然后再在文件最后写入"-------------------------------------"
# Author:Tim Gu
f = open('file.txt','r+',encoding='utf-8') #读写
print(f.readline())
print(f.readline())
print(f.readline())
f.write("----------------------------------------------")
print(f.readline())
  文件的模式:w+ 写读模式:会创建新文件,此段代码会覆盖掉源文件
# Author:Tim Gu
f = open('file.txt','w+',encoding='utf-8') #写读
print(f.readline())
print(f.readline())
print(f.readline())
f.write("----------------------------------------------")
print(f.readline())
  tell()和seek()联合使用:
# Author:Tim Gu
f = open('file.txt','w+',encoding='utf-8') #写读
f.write("-----------------------------1------------------------")
f.write("\n-----------------------------2------------------------")
f.write("\n-----------------------------3------------------------")
f.write("\n-----------------------------4------------------------")
print(f.tell()) #打印光标所在位置
f.seek(10)
#使光标回到第十个字符的位置
print(f.readline())
#打印当前行
-------------------1------------------------
此时文件内容:
-----------------------------1------------------------
-----------------------------2------------------------
-----------------------------3------------------------
-----------------------------4------------------------should be at the begining of the second line
  line.replace的用法,修改文件中的某一行内容:
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8')
f_new = open('file3.bak','w',encoding='utf-8')
for line in f:
if '天边的你飘泊白云外' in line:
line = line.replace('天边的你飘泊白云外','aaaaaaaaa')
#修改这一行字符串
f_new.write(line)
f_new.close()
&  使用with打开文件:
with open('file.txt','r',encoding='utf-8') as f,\
open('file3.txt','r',encoding='utf-8') as f2:
for line in f:
print(line)
for line in f2:
print(line)
  注:因实际开发过程中,打开文件很容易忘记关闭文件,造成内存不能释放,所以一般可以选择使用with open方法打开文件
    python3的新特性:x
f = open('<span style="color: #.txt','x',encoding='utf-8') #如果文件存在则报错,不存在则创建文件并只写
  文件之ab模式:
f = open('<span style="color: #.txt','ab') #使用ab写文件
f.write(bytes('顾卿',encoding='utf-8')) #因为有b,所以必须传字节类型,所以使用bytes把字符串转化为字节类型
  seek()和tell()的特性:模式r+一般比较常用,相比较a+,r+可控制指针位置来写,而a+则永远只能在末尾写 
f = open('<span style="color: #.txt','r+',encoding='utf-8') #打开模式是r+(无b),读取按照字符读取
data = f.read(1)
print(f.tell()) #tell当前指针所在的位置(字节)
f.seek(f.tell()) #调整当前指针的位置(字节)
f.write('<span style="color: #8') #当前位置开始覆盖
  flush()的作用:
f = open('<span style="color: #.txt','a',encoding='utf-8')
f.write('<span style="color: #3')
#将缓存内容强制写进磁盘
input('asdfasd')
  seekable():是否可以移动指针
打开两个文件,将第一个文件的内容写进第二个文件:
with open('<span style="color: #.txt','r',encoding='utf-8') as f1,open('<span style="color: #.txt','w',encoding='utf-8') as f2:
for line in f1:
times += 1
if times &= 10:
f2.write(line)
读取第一个文件内容,修改后写入第二个文件:
with open('<span style="color: #.txt','r',encoding='utf-8') as f1,open('<span style="color: #.txt','w',encoding='utf-8') as f2:
for line in f1:
new_str = line.replace('aaaaa','st')
f2.write(new_str)
阅读(...) 评论()python变量和作用域
1、作用域介绍
python中的作用域分4种情况:
L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:globa,全局变量,就是模块级别定义的变量;
B:built-in,固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。
x = int(2.9)
# int built-in
g_count = 0
def outer():
o_count = 1
# enclosing
def inner():
i_count = 2
# local当然,local和enclosing是相对的,enclosing变量相对上层来说也是local。
2、作用域产生
在中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的,如下代码:
# 1这个是没有问题的,if并没有引入一个新的作用域,x仍处在当前作用域中,后面代码可以使用。
def test():
# NameError: name 'x2' is not defineddef、class、lambda是可以引入新作用域的。
3、变量的修改
一个不在局部作用域里的变量默认是只读的,如果试图为其绑定一个新的&#20540;,python认为是在当前的局部作用域里创建一个新的变量,也就是说在当前局部作用域中,如果直接使用外部作用域的变量,那么这个变量是只读的,不能修改,如:
count = 10
def outer():
print(count)
count = 100
print(count)
#UnboundLocalError: local variable 'count' referenced before assignment
这里第一个print中,使用到了外部作用域的count,这样后面count就指外部作用域中的count了,再修改就会报错。
如果没使用过这个变量,而直接赋&#20540;,会认为是新定义的变量,此时会覆盖外部作用域中变量,如:
count = 10
def outer():
count = 100
print(count)
#100内部作用域中直接声明了count=100,后面使用count都是内部作用域的了。
4、global关键字
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了,当修改的变量是在全局作用域(global作用域)上的,就要使用global先声明一下,代码如下:
count = 10
def outer():
global count
print(count)
count = 100
print(count)
5、nonlocal关键字
global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了
def outer():
count = 10
def inner():
nonlocal count
count = 20
print(count)
print(count)
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的&#20540;时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个关键字,就能完美的实现闭包了。}

我要回帖

更多关于 python读取文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信