Reading/writing 个文件 Python

Reading/writing files in Python

我正在尝试从如下所示的 russell 2k 股票代码创建一个新的文本文件:

我只想要每行末尾的股票代码。所以我有以下代码:

with open("russ.txt", "r") as f:
    for line in f:
        line = line.split()
        line = line[-1]
        if line == "Ticker": continue
        print line
        with open("output.txt", "w") as fh:
            fh.seek(0,2)
            print line
            fh.write(line)

我在 output.txt 文件中得到的只是一行,其中包含列表中的最后一个代码,而不是所有代码。我认为使用 fh.seek(0,2) 会在每次结束时创建一个新行。我究竟做错了什么?此外,实际上我不需要创建另一个文档,我可以只编辑当前文档,但我也无法弄清楚,所以如果你能告诉我如何只写入同一个文件,那也是完全可以接受的。

您可以将文件读入列表,然后使用.split() 方法将其沿空格拆分。因为 ticekr 是列表的最后一个元素。你可以通过负索引得到它。

f = [line.strip() for line in open('so.txt')]
for i in f:
    print i.split(' ')[-1]

输入文件:

STARK INDUSTRIES ST
STARK INDUSTRIES ST
STARK INDUSTRIES ST
STARK INDUSTRIES ST
STARK INDUSTRIES ST

输出:

ST
ST
ST
ST
ST

您每次打开文件时都会覆盖它。将 with 行移到 for 块之外,并在写入之前查找到末尾(或以追加模式打开)。

我相信使用 fileinput 对你的情况也会很方便:

import fileinput
import sys


for line in fileinput.input("russ.txt", inplace=1):
    sys.stdout.write(line.split(' ')[-1])

fileinput.input 将更改原始文件。

文件模式"w" 在每个步骤中创建一个新的空文件。要么使用模式 "a" 进行追加,要么将打开的文件移动到循环之外。

with open("russ.txt", "r") as f:
    for line in f:
        line = line.split()
        line = line[-1]
        if line == "Ticker": continue
        print line
        with open("output.txt", "a") as fh:
            fh.write(line + "\n")

或更好,只打开文件一次:

with open("russ.txt", "r") as f, open("output.txt", "w") as fh:
    for line in f:
        symbol = line.split()[-1]
        if symbol != "Ticker":
            print symbol
            fh.write(symbol + "\n")