在 for/while 循环中读取文件内容,删除转义字符

在 for/while 循环中读取文件内容,删除转义字符

我正在尝试读取文件的内容,该文件的行分隔符为,CRLF但我认为这不是问题,并且\n每行末尾都有一个字符,有时\t单词之间有一个字符,有没有办法可以一次读取其内容,但忽略每个转义字符?我不想阅读和\n\t我想忽略它们。

我的文件(arq.txt):

aaaaa\n
bbbbb\n
ccccc\n
ee\teee\n
ddddd\n
fffff\n
gg\tggg\n
hhhhh\n

我尝试过的:

$ while IFs="" ; read line ; do echo $line ; done < arq.txt 
aaaaan
bbbbbn
cccccn
eeteeen
dddddn
fffffn
ggtgggn
hhhhhn

和:

$ for line in `cat arq.txt` ; do echo $line ; done
aaaaa\n
bbbbb\n
ccccc\n
ee\teee\n
ddddd\n
fffff\n
gg\tggg\n
hhhhh\n

答案1

我不知道有什么方法可以完全阻止读取字符序列,但您可以使用它read -r来阻止它们被视为 ANSI 转义,然后从结果中删除文字\t和:\n

$ while IFS= read -r line; do echo "${line//\\[tn]/}"; done < arq.txt 
aaaaa
bbbbb
ccccc
eeeee
ddddd
fffff
ggggg
hhhhh

请注意,您可以使用外部正则表达式工具实现相同的功能,例如sed 's/\\[tn]//g' arq.txt

答案2

with open('arq.txt') as f:
    for line in f.readlines():
        print (line.rstrip().replace('\t',''))

将其粘贴到文本文件中并保存arq.py在与 arq.txt 文件相同的目录中。

运行它python arq.py

说明:打印文件中的每一行。rstrip()删除行尾字符。用空字符串replace替换制表符(' \t' 是制表符的转义序列)。

相关内容