我正试图在russell 2k中创建一个新的文本符号文本文件,如下所示:
我想要的只是每行末尾的股票代码。所以我有以下代码:
commentcount
我在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
每次都会在最后创建一个新行。我究竟做错了什么?此外,实际上我不需要创建另一个文档,我只能编辑当前的文档,但我无法弄清楚,如果你能告诉我如何写入同样的文件也是完全可以接受的。
答案 0 :(得分:1)
我相信使用fileinput
对您来说也很方便:
import fileinput
import sys
for line in fileinput.input("russ.txt", inplace=1):
sys.stdout.write(line.split(' ')[-1])
fileinput.input
将更改原始文件。
答案 1 :(得分:1)
filemode "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")
答案 2 :(得分:0)
您可以将文件读入列表,然后使用.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
答案 3 :(得分:0)
每次打开文件时都会覆盖该文件。将with
行移到for
块之外,并在写入之前寻找结尾(或以追加模式打开)。