文件流I/O.py精简版

本文详细介绍Python中文件操作的方法,包括文件的打开与关闭、读写、定位、重命名与删除等,同时介绍了目录操作方法,适合初学者快速掌握。

本文讲述文件,目录的相关方法  File对象方法: file对象提供了操作文件的一系列方法    OS 对象方法: 提供了处理文件及目录的一系列方法

I/O函数

输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式。此函数把你传递的表达式转换成一个字符串表达式

读取键盘输入     包括raw_input函数和input函数

Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘

raw_input函数

raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)

input函数

input([prompt]) 函数和raw_input([prompt]) 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果

打开和关闭文件

open函数

先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写

file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。

access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

不同模式打开文件的完全列表:

r 只读    r+读     rb  以二进制格式只读       rb+以二进制格式读

w只写    w+写    wb以二进制格式只写        wb+以二进制格式写

a追加 新的内容将会被写入到已有内容之后    a+读写  追加模式   ab以二进制格式追加  新的内容将会被写入到已有内容之后                          ab+以二进制格式追加

file对象的属性    file对象方法如下

属性	                    描述
file.closed	如果文件已被关闭返回true,否则返回false。
file.mode	返回被打开文件的访问模式。
file.name	返回文件的名称。
file.softspace	如果用print输出后,必须跟一个空格符,则返回false。否则返回true。

Close()方法

刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入

Write()方法

可将任何字符串写入一个打开的文件

read()方法

从一个打开的文件中读取一个字符串

文件位置:tell()方法 和seek(offset [,from])方法

tell()方法

告诉你文件内的当前位置

seek(offset [,from])方法   

Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置

改变当前文件的位置

重命名和删除文件  rename()方法和remove()方法

rename()方法

需要两个参数,当前的文件名和新文件名

remove()方法

删除文件,需要提供要删除的文件名作为参数

python里的目录 os方法如下

mkdir()方法

在当前目录下创建新的目录们

chdir()方法

改变当前的目录

getcwd()方法

显示当前的工作目录

rmdir()方法

删除目录,目录名称以参数传递     在删除这个目录之前,它的所有内容应该先被清除











简化这个miniupnpc的makefile,我在linux下运行,不需要生成.a文件,生成.so文件。# $Id: Makefile,v 1.119 2014/11/26 10:42:03 nanard Exp $ # MiniUPnP Project # http://miniupnp.free.fr/ # http://miniupnp.tuxfamily.org/ # https://github.com/miniupnp/miniupnp # (c) 2005-2014 Thomas Bernard # to install use : # $ make DESTDIR=/tmp/dummylocation install # or # $ INSTALLPREFIX=/usr/local make install # or # $ make install (default INSTALLPREFIX is /usr) OS = $(shell uname -s) VERSION = $(shell cat VERSION) ifeq ($(OS), Darwin) JARSUFFIX=mac endif ifeq ($(OS), Linux) JARSUFFIX=linux endif ifneq (,$(findstring NT-5.1,$(OS))) JARSUFFIX=win32 endif HAVE_IPV6 ?= yes export HAVE_IPV6 CC ?= gcc #AR = gar #CFLAGS = -O -g -DDEBUG CFLAGS ?= -O CFLAGS += -Wall CFLAGS += -W -Wstrict-prototypes CFLAGS += -fno-common CFLAGS += -DMINIUPNPC_SET_SOCKET_TIMEOUT CFLAGS += -DMINIUPNPC_GET_SRC_ADDR CFLAGS += -D_BSD_SOURCE -D_POSIX_C_SOURCE=200112L CFLAGS += -ansi LDFLAGS += -Wl,-rpath,/lib:/usr/lib # -DNO_GETADDRINFO INSTALL = install SH = /bin/sh JAVA = java # see http://code.google.com/p/jnaerator/ #JNAERATOR = jnaerator-0.9.7.jar #JNAERATOR = jnaerator-0.9.8-shaded.jar #JNAERATORARGS = -library miniupnpc #JNAERATOR = jnaerator-0.10-shaded.jar JNAERATOR = jnaerator-0.11-shaded.jar JNAERATORARGS = -mode StandaloneJar -runtime JNAerator -library miniupnpc JNAERATORBASEURL = http://jnaerator.googlecode.com/files/ ifeq (SunOS, $(OS)) LDFLAGS=-lsocket -lnsl -lresolv endif # APIVERSION is used to build SONAME APIVERSION = 12 SRCS = igd_desc_parse.c miniupnpc.c minixml.c minisoap.c miniwget.c \ upnpc.c upnpcommands.c upnpreplyparse.c testminixml.c \ minixmlvalid.c testupnpreplyparse.c minissdpc.c \ upnperrors.c testigddescparse.c testminiwget.c \ connecthostport.c portlistingparse.c receivedata.c \ testportlistingparse.c miniupnpcmodule.c \ minihttptestserver.c util.c \ listdevices.c LIBOBJS = miniwget.o minixml.o igd_desc_parse.o minisoap.o \ miniupnpc.o upnpreplyparse.o upnpcommands.o upnperrors.o \ connecthostport.o portlistingparse.o receivedata.o util.o ifneq ($(OS), AmigaOS) CFLAGS := -fPIC $(CFLAGS) LIBOBJS := $(LIBOBJS) minissdpc.o endif OBJS = $(patsubst %.c,%.o,$(SRCS)) # HEADERS to install HEADERS = miniupnpc.h miniwget.h upnpcommands.h igd_desc_parse.h \ upnpreplyparse.h upnperrors.h miniupnpctypes.h \ portlistingparse.h \ declspec.h # library names LIBRARY = libminiupnpc.a ifeq ($(OS), Darwin) SHAREDLIBRARY = libminiupnpc.dylib SONAME = $(basename $(SHAREDLIBRARY)).$(APIVERSION).dylib CFLAGS := -D_DARWIN_C_SOURCE $(CFLAGS) else ifeq ($(JARSUFFIX), win32) SHAREDLIBRARY = miniupnpc.dll else # Linux/BSD/etc. SHAREDLIBRARY = libminiupnpc.so SONAME = $(SHAREDLIBRARY).$(APIVERSION) endif endif EXECUTABLES = upnpc-static listdevices EXECUTABLES_ADDTESTS = testminixml minixmlvalid testupnpreplyparse \ testigddescparse testminiwget testportlistingparse TESTMINIXMLOBJS = minixml.o igd_desc_parse.o testminixml.o TESTMINIWGETOBJS = miniwget.o testminiwget.o connecthostport.o receivedata.o TESTUPNPREPLYPARSE = testupnpreplyparse.o minixml.o upnpreplyparse.o TESTPORTLISTINGPARSE = testportlistingparse.o minixml.o portlistingparse.o TESTIGDDESCPARSE = testigddescparse.o igd_desc_parse.o minixml.o \ miniupnpc.o miniwget.o upnpcommands.o upnpreplyparse.o \ minisoap.o connecthostport.o receivedata.o \ portlistingparse.o ifneq ($(OS), AmigaOS) EXECUTABLES := $(EXECUTABLES) upnpc-shared TESTMINIWGETOBJS := $(TESTMINIWGETOBJS) minissdpc.o TESTIGDDESCPARSE := $(TESTIGDDESCPARSE) minissdpc.o endif LIBDIR ?= lib # install directories INSTALLPREFIX ?= $(PREFIX)/usr INSTALLDIRINC = $(INSTALLPREFIX)/include/miniupnpc INSTALLDIRLIB = $(INSTALLPREFIX)/$(LIBDIR) INSTALLDIRBIN = $(INSTALLPREFIX)/bin INSTALLDIRMAN = $(INSTALLPREFIX)/share/man FILESTOINSTALL = $(LIBRARY) $(EXECUTABLES) ifneq ($(OS), AmigaOS) FILESTOINSTALL := $(FILESTOINSTALL) $(SHAREDLIBRARY) endif .PHONY: install clean depend all check test everything \ installpythonmodule updateversion # validateminixml validateminiwget all: $(LIBRARY) $(EXECUTABLES) test: check check: validateminixml validateminiwget validateupnpreplyparse \ validateportlistingparse validateigddescparse everything: all $(EXECUTABLES_ADDTESTS) pythonmodule: $(LIBRARY) miniupnpcmodule.c setup.py python setup.py build touch $@ installpythonmodule: pythonmodule python setup.py install pythonmodule3: $(LIBRARY) miniupnpcmodule.c setup.py python3 setup.py build touch $@ installpythonmodule3: pythonmodule3 python3 setup.py install validateminixml: minixmlvalid @echo "minixml validation test" ./minixmlvalid touch $@ validateminiwget: testminiwget minihttptestserver testminiwget.sh @echo "miniwget validation test" ./testminiwget.sh touch $@ validateupnpreplyparse: testupnpreplyparse testupnpreplyparse.sh @echo "upnpreplyparse validation test" ./testupnpreplyparse.sh touch $@ validateportlistingparse: testportlistingparse @echo "portlistingparse validation test" ./testportlistingparse touch $@ validateigddescparse: testigddescparse @echo "igd desc parse validation test" ./testigddescparse testdesc/new_LiveBox_desc.xml testdesc/new_LiveBox_desc.values ./testigddescparse testdesc/linksys_WAG200G_desc.xml testdesc/linksys_WAG200G_desc.values touch $@ clean: $(RM) $(LIBRARY) $(SHAREDLIBRARY) $(EXECUTABLES) $(OBJS) miniupnpcstrings.h $(RM) $(EXECUTABLES_ADDTESTS) # clean python stuff $(RM) pythonmodule pythonmodule3 $(RM) validateminixml validateminiwget validateupnpreplyparse $(RM) validateigddescparse $(RM) minihttptestserver $(RM) -r build/ dist/ #python setup.py clean # clean jnaerator stuff $(RM) _jnaerator.* java/miniupnpc_$(OS).jar distclean: clean $(RM) $(JNAERATOR) java/*.jar java/*.class out.errors.txt updateversion: miniupnpc.h cp miniupnpc.h miniupnpc.h.bak sed 's/\(.*MINIUPNPC_API_VERSION\s\+\)[0-9]\+/\1$(APIVERSION)/' < miniupnpc.h.bak > miniupnpc.h install: updateversion $(FILESTOINSTALL) $(INSTALL) -d $(DESTDIR)$(INSTALLDIRINC) $(INSTALL) -m 644 $(HEADERS) $(DESTDIR)$(INSTALLDIRINC) $(INSTALL) -d $(DESTDIR)$(INSTALLDIRLIB) $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(INSTALLDIRLIB) ifneq ($(OS), AmigaOS) $(INSTALL) -m 644 $(SHAREDLIBRARY) $(DESTDIR)$(INSTALLDIRLIB)/$(SONAME) ln -fs $(SONAME) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY) endif $(INSTALL) -d $(DESTDIR)$(INSTALLDIRBIN) ifeq ($(OS), AmigaOS) $(INSTALL) -m 755 upnpc-static $(DESTDIR)$(INSTALLDIRBIN)/upnpc else $(INSTALL) -m 755 upnpc-shared $(DESTDIR)$(INSTALLDIRBIN)/upnpc endif $(INSTALL) -m 755 external-ip.sh $(DESTDIR)$(INSTALLDIRBIN)/external-ip ifneq ($(OS), AmigaOS) $(INSTALL) -d $(DESTDIR)$(INSTALLDIRMAN)/man3 $(INSTALL) -m 644 man3/miniupnpc.3 $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 ifeq ($(OS), Linux) gzip -f $(DESTDIR)$(INSTALLDIRMAN)/man3/miniupnpc.3 endif endif cleaninstall: $(RM) -r $(DESTDIR)$(INSTALLDIRINC) $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(LIBRARY) $(RM) $(DESTDIR)$(INSTALLDIRLIB)/$(SHAREDLIBRARY) depend: makedepend -Y -- $(CFLAGS) -- $(SRCS) 2>/dev/null $(LIBRARY): $(LIBOBJS) $(AR) crs $@ $? $(SHAREDLIBRARY): $(LIBOBJS) ifeq ($(OS), Darwin) # $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(SONAME) -o $@ $^ $(CC) -dynamiclib $(LDFLAGS) -Wl,-install_name,$(INSTALLDIRLIB)/$(SONAME) -o $@ $^ else $(CC) -shared $(LDFLAGS) -Wl,-soname,$(SONAME) -o $@ $^ endif upnpc-static: upnpc.o $(LIBRARY) $(CC) $(LDFLAGS) -o $@ $^ upnpc-shared: upnpc.o $(SHAREDLIBRARY) $(CC) $(LDFLAGS) -o $@ $^ listdevices: listdevices.o $(LIBRARY) $(LDLIBS) $(CC) $(LDFLAGS) -o $@ $^ testminixml: $(TESTMINIXMLOBJS) testminiwget: $(TESTMINIWGETOBJS) minixmlvalid: minixml.o minixmlvalid.o testupnpreplyparse: $(TESTUPNPREPLYPARSE) testigddescparse: $(TESTIGDDESCPARSE) testportlistingparse: $(TESTPORTLISTINGPARSE) miniupnpcstrings.h: miniupnpcstrings.h.in updateminiupnpcstrings.sh VERSION $(SH) updateminiupnpcstrings.sh # ftp tool supplied with OpenBSD can download files from http. jnaerator-%.jar: wget $(JNAERATORBASEURL)/$@ || \ curl -o $@ $(JNAERATORBASEURL)/$@ || \ ftp $(JNAERATORBASEURL)/$@ jar: $(SHAREDLIBRARY) $(JNAERATOR) $(JAVA) -jar $(JNAERATOR) $(JNAERATORARGS) \ miniupnpc.h declspec.h upnpcommands.h upnpreplyparse.h \ igd_desc_parse.h miniwget.h upnperrors.h $(SHAREDLIBRARY) \ -package fr.free.miniupnp -o . -jar java/miniupnpc_$(JARSUFFIX).jar -v mvn_install: mvn install:install-file -Dfile=java/miniupnpc_$(JARSUFFIX).jar \ -DgroupId=com.github \ -DartifactId=miniupnp \ -Dversion=$(VERSION) \ -Dpackaging=jar \ -Dclassifier=$(JARSUFFIX) \ -DgeneratePom=true \ -DcreateChecksum=true # make .deb packages deb: /usr/share/pyshared/stdeb all (python setup.py --command-packages=stdeb.command bdist_deb) # install .deb packages ideb: (sudo dpkg -i deb_dist/*.deb) /usr/share/pyshared/stdeb: /usr/share/doc/python-all-dev (sudo apt-get install python-stdeb) /usr/share/doc/python-all-dev: (sudo apt-get install python-all-dev) minihttptestserver: minihttptestserver.o # DO NOT DELETE THIS LINE -- make depend depends on it. igd_desc_parse.o: igd_desc_parse.h miniupnpc.o: miniupnpc.h declspec.h igd_desc_parse.h minissdpc.h miniwget.h miniupnpc.o: minisoap.h minixml.h upnpcommands.h upnpreplyparse.h miniupnpc.o: portlistingparse.h miniupnpctypes.h connecthostport.h miniupnpc.o: receivedata.h minixml.o: minixml.h minisoap.o: minisoap.h miniupnpcstrings.h miniwget.o: miniupnpcstrings.h miniwget.h declspec.h connecthostport.h miniwget.o: receivedata.h upnpc.o: miniwget.h declspec.h miniupnpc.h igd_desc_parse.h upnpcommands.h upnpc.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h upnperrors.h upnpcommands.o: upnpcommands.h upnpreplyparse.h portlistingparse.h declspec.h upnpcommands.o: miniupnpctypes.h miniupnpc.h igd_desc_parse.h upnpreplyparse.o: upnpreplyparse.h minixml.h testminixml.o: minixml.h igd_desc_parse.h minixmlvalid.o: minixml.h testupnpreplyparse.o: upnpreplyparse.h minissdpc.o: minissdpc.h miniupnpc.h declspec.h igd_desc_parse.h codelength.h upnperrors.o: upnperrors.h declspec.h upnpcommands.h upnpreplyparse.h upnperrors.o: portlistingparse.h miniupnpctypes.h miniupnpc.h upnperrors.o: igd_desc_parse.h testigddescparse.o: igd_desc_parse.h minixml.h miniupnpc.h declspec.h testminiwget.o: miniwget.h declspec.h connecthostport.o: connecthostport.h portlistingparse.o: portlistingparse.h declspec.h miniupnpctypes.h minixml.h receivedata.o: receivedata.h testportlistingparse.o: portlistingparse.h declspec.h miniupnpctypes.h miniupnpcmodule.o: miniupnpc.h declspec.h igd_desc_parse.h upnpcommands.h miniupnpcmodule.o: upnpreplyparse.h portlistingparse.h miniupnpctypes.h miniupnpcmodule.o: upnperrors.h listdevices.o: miniupnpc.h declspec.h igd_desc_parse.h
09-16
gapinyc@DESKTOP-9QS7RL5:~/superset-prod$ docker compose build # 重新构建 [+] Building 348.1s (14/21) => [internal] load local bake definitions 0.0s => => reading from stdin 1.61kB 0.0s => [superset internal] load build definition from Dockerfile.superset 0.0s => => transferring dockerfile: 3.00kB 0.0s => [superset-init internal] load metadata for docker.io/apache/superset:3.1.0 0.3s => [superset-init internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => CACHED [superset-init 1/17] FROM docker.io/apache/superset:3.1.0@sha256:afcd2f63479e29da06944087a29e7788f9ecd0250f4611e52aee1c844187e3eb 0.0s => => resolve docker.io/apache/superset:3.1.0@sha256:afcd2f63479e29da06944087a29e7788f9ecd0250f4611e52aee1c844187e3eb 0.0s => [superset 2/17] RUN apt-get update && apt-get install -y --no-install-recommends build-essential libssl-dev libffi-dev python3 99.5s => [superset 3/17] RUN python -m ensurepip --upgrade || (wget https://bootstrap.pypa.io/get-pip.py -O /tmp/get-pip.py && python /tmp/get-pip.py --user) 2.1s => [superset-init 4/17] RUN python -m pip --version 0.5s => [superset 5/17] RUN python -m pip install --upgrade pip && python -m pip install "gevent>=21.12.0" psutil pymysql flask-appbu 108.3s => [superset 6/17] RUN python -c "import gevent; print(f'✅ Successfully imported gevent {gevent.__version__}')" 0.3s => [superset-init 7/17] RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor -o /usr/share/keyrings/nodesource-keyring.gpg 0.9s => [superset-init 8/17] RUN echo "deb [signed-by=/usr/share/keyrings/nodesource-keyring.gpg] https://deb.nodesource.com/node_18.x jammy main" > /etc/apt/sources.list. 0.2s => [superset 9/17] RUN apt-get update && apt-get install -y nodejs && rm -rf /var/lib/apt/lists/* 135.4s => ERROR [superset 10/17] RUN node --version && npm --version 0.3s ------ > [superset 10/17] RUN node --version && npm --version: 0.238 v18.20.4 0.240 /bin/sh: 1: npm: not found ------ Dockerfile.superset:62 -------------------- 60 | 61 | # 验证安装 62 | >>> RUN node --version && npm --version 63 | 64 | # =================================================================================== -------------------- target superset-init: failed to solve: process "/bin/sh -c node --version && npm --version" did not complete successfully: exit code: 127 gapinyc@DESKTOP-9QS7RL5:~/superset-prod$
10-23
报错日志: [root@vdb1 script]# ./gs_expansion -U vastbase -G vastbase -h 192.168.248.140 -X ../cluster_config0721.xml Start expansion with cluster manager component. Start to send soft to each standby nodes. End to send soft to each standby nodes. Success to send XML to new nodes Start to perform perinstall on nodes: ['vdb4'] Preinstall command is: /tmp/gs_expansion_2025-07-21_13_22_17_999864/pkg/script/gs_preinstall -U vastbase -G vastbase -X /data/soft/vastbase-installer/cluster_config0721.xml -L --sep-env-file=/home/vastbase/.Vastbase --non-interactive 2>&1 Traceback (most recent call last): File "/data/soft/vastbase-installer/script/gspylib/threads/SshTool.py", line 609, in getSshStatusOutput raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] Exception: [GAUSS-51400] : Failed to execute the command: source /etc/profile && unset LD_LIBRARY_PATH && /data/soft/vastbase-installer/lib/python/bin/python3 /data/soft/vastbase-installer/script/gspylib/pssh/bin/pssh -t 310 -H vdb4 -P -p 300 -o /tmp/gauss_output_files_1405752_2025-07-21_13:22:19_199259_016 -e /tmp/gauss_error_files_1405752_2025-07-21_13:22:19_199259_016 "source /etc/profile;source /home/vastbase/.Vastbase;/tmp/gs_expansion_2025-07-21_13_22_17_999864/pkg/script/gs_preinstall -U vastbase -G vastbase -X /data/soft/vastbase-installer/cluster_config0721.xml -L --sep-env-file=/home/vastbase/.Vastbase --non-interactive 2>&1" 2>&1 | tee /tmp/gauss_result_1405752_2025-07-21_13:22:19_199259_016.log. Error: [1] 13:28:18 [FAILURE] vdb4 Timed out, Killed by signal Signals.SIGKILL During handling of the above exception, another exception occurred: Traceback (most recent call last): File "./gs_expansion", line 614, in <module> expansion.expand_run(expansion) File "./gs_expansion", line 447, in expand_run expand_impl.run() File "/data/soft/vastbase-installer/script/impl/expansion/expansion_impl_with_cm.py", line 558, in run self.do_preinstall() File "/data/soft/vastbase-installer/script/impl/expansion/expansion_impl_with_cm.py", line 470, in do_preinstall self.preinstall_run() File "/data/soft/vastbase-installer/script/impl/expansion/expansion_impl_with_cm.py", line 145, in preinstall_run self.ssh_tool.getSshStatusOutput(cmd, File "/data/soft/vastbase-installer/script/gspylib/threads/SshTool.py", line 650, in getSshStatusOutput raise Exception(str(e)) Exception: [GAUSS-51400] : Failed to execute the command: source /etc/profile && unset LD_LIBRARY_PATH && /data/soft/vastbase-installer/lib/python/bin/python3 /data/soft/vastbase-installer/script/gspylib/pssh/bin/pssh -t 310 -H vdb4 -P -p 300 -o /tmp/gauss_output_files_1405752_2025-07-21_13:22:19_199259_016 -e /tmp/gauss_error_files_1405752_2025-07-21_13:22:19_199259_016 "source /etc/profile;source /home/vastbase/.Vastbase;/tmp/gs_expansion_2025-07-21_13_22_17_999864/pkg/script/gs_preinstall -U vastbase -G vastbase -X /data/soft/vastbase-installer/cluster_config0721.xml -L --sep-env-file=/home/vastbase/.Vastbase --non-interactive 2>&1" 2>&1 | tee /tmp/gauss_result_1405752_2025-07-21_13:22:19_199259_016.log. Error: [1] 13:28:18 [FAILURE] vdb4 Timed out, Killed by signal Signals.SIGKILL
07-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值