如何逐行读取文件并处理

1 投票
2 回答
747 浏览
提问于 2025-04-18 15:11

我需要读取一个JavaScript文件,然后通过SSH连接发送这个文件。这个文件是标准的Unix格式,每行的末尾都有一个换行符。我使用的是Python 2.76。

当我读取这个文件并打印出来时,每行只显示一个字符。我查看了这里类似的问题,但我遇到的情况和那些帖子说的完全不一样。

def slurpWorkerCode(filename):
    file = open(filename, "r")
    data = file.read().replace('\n', '')
    return data

ecma = slurpWorkerCode("/devel/backup/list.aksh")

for line in ecma:
    print line

输出:

<snip>
v
a
r

M
O
N
T
H
S
<snip>

我这样做是不是错了?

谢谢任何帮助。

2 个回答

2

问题出在这里:

data = file.read().replace('\n', '')

file.read() 会把整个文件当作一个大字符串返回。如果你想把这个字符串分成一行一行的列表,可以用 .split('\n'),不过这样做有点麻烦。

更标准的读取文件为行列表并去掉换行符的方法是:

def slurpWorkerCode(filename):
    with open(filename, "r") as f:
        return [line.rstrip('\n') for line in f]

生成器版本看起来是这样的:

def slurpWorkerCode(filename):
    with open(filename, "r") as f:
        for line in f: 
            yield line.rstrip('\n')
2

read() 这个函数会返回一个完整的字符串,所以 data(也就是 ecma)都是单个字符串。当你对一个字符串进行循环时,每次只能得到一个字符。我猜你真正想要的是

data = file.readlines()

这样 data(也就是 ecma)就会变成一个字符串的列表,每行一个字符串。

撰写回答