Tcl——访问文件(二)
一 open 和 close
不论是读取文件还是写入文件,我们都需要先打开一个文件,Tcl 通过 open 命令打开一个文件。
open 命令的语法规则为:
# open 命令的语法规则
set file [open "path/to/file.extension" mode]
其中 ,"path/to/file.extension" 是要打开的文件的路径,mode 是打开文件的模式。mode 可以是以下之一:
选项 | 解释 |
r | 只读模式 |
w | 写入模式 |
a | 追加模式 |
非常重要的概念!!!
open 命令的返回值是一个文件句柄,文件句柄就是一个指向打开文件的指针。它允许你读取或写入文件,你可以使用文件句柄进行各种操作,例如读取文件内容或将数据写入文件。
我们对文件句柄执行完各种操作后,需要通过 close 命令来关闭文件。关闭文件可以释放文件句柄。如果不关闭文件,文件句柄将一直存在于内存当中,会导致内存泄漏和系统资源浪费。因此关闭文件,是一个良好的编程习惯。
二 读取文件
Tcl 提供了多种方式来读取文件,包括读取整个文件、逐行读取文件、读取特定行等。
2.1 读取整个文件 —— read
read 命令的返回值是从文件中读取的内容。
例如,在当前目录下有名为example.txt文件。通过 open 命令打开,read 读取,close 关闭。
# read命令读取整个文件内容
set file [open "./example.txt" r]
set content [read $file]
puts $content
close $file
2.2 逐行读取 —— gets
gets 命令后接两个参数:第一个是 open 命令的返回值,第二个是一个变量,用于存储文件内容。
gets 命令的返回值是内容的大小(以字节为单位),读到文件末尾时,gets 返回 -1 。
# gets命令语法规则
gets fileID varName
其中,fileID 是文件句柄,即使用 open 命令打开文件时返回的指针。varName 是变量名,用于存储从文件中读取的数据。
set fileID [open "./example.txt" r]
while {[gets $fileID lines] != -1 } {
puts $lines
}
close $fileID
在这个例子中,我们使用 open 命令打开 example.txt 文件,并将返回的文件句柄存储在 fileID 中。然后,我们使用 while 循环和 gets 命令逐行读取文件的内容,并将每行的内容输出到控制台。最后,我们通过 close 命令关闭文件,释放文件句柄和系统资源。
2.3 读取特定行
# 读取文件的特定行
set file [open "example.txt" r]
set content [read $file]
set lines [split $content "\n"]
puts [lindex $lines 3]
close $file
可以结合各个命令来实现打印某一行的内容
三 写入文件
Tcl 也提供了多种方式来写入文件,包括写入整个文件、逐行写入文件、写入特定行等。
3.1 写入整个文件 —— puts
# puts写入数据
set fid [open "example.txt" w]
set content "Hello,world!"
puts $fid $content
close $fid
可以看到,写文件是,如果文件已存在,则写入的数据会覆盖原始的内容!
3.2 阻止换行 —— puts -nonewline
set file [open "example.txt" w] set content {"line1" "line2" "line3"} foreach line $content { # 阻止换行 puts -nonewline $file $line } close $file
3.3 写入特定行 —— seek 命令
set file [open "example.txt" r+]
seek $file 0 end
puts $file "new line"
close $file
通过 seek 命令在文件的末尾添加文本
总结:关于puts命令的新理解,puts命令是Tcl中用于输出文本信息的命令。它的语法规则如下:
puts ?-nonewline? ?channelId? string
其中 nonewline 和 channelId 是可选参数,例如在本文中的使用就用上了这两个可选参数。
其中,-nonewline 是一个可选参数,用于指定输出的字符串末尾不添加换行符。channelId 也是一个可选参数,用于指定输出的通道,例如本文的文件句柄(指针)。
weixin_48972433: 执行完conda env create f environment.yml指令出现报错usage: conda-env [-h] {attach,create,export,list,remove,upload,update} ... conda-env: error: unrecognized arguments: environment.yml是为什么?
m0_49691379: 怎么配置yml文件呀?在哪儿创建?
初中没毕业(真的): 老大,说下怎么调试呀
*Sally Enid*: 为什么后面安装pytorch安装不上呀?
hhdejuice: 对照鲜明,通俗易懂