简体   繁体   中英

Reading/writing files in Python

I am trying to create a new text file of stock symbols in the russell 2k from one that looks like this:

在此处输入图片说明

All I want is the ticker symbol at the end of each line. So I have the following code:

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)

All I end up with in the output.txt file is one line with the very last ticker in the list instead of all the tickers. I thought using fh.seek(0,2) would create a new line at the end each time through. What am I doing wrong? Also, in reality I don't need to create another doc, I could just edit the current one but I couldn't figure that out either so if you could show me how to just write to the same file that also is perfectly acceptable.

I believe using fileinput will be also handy in your case:

import fileinput
import sys


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

fileinput.input will change original file.

The filemode "w" creates a new empty file in each step. Either use mode "a" for append, or move the file opening outside the loop.

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")

or better, open the file only once:

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")

You can read the file into a list and then use the .split() method to split it along the spaces. Since the ticekr is the last element of the list. You can get it via negative indexing.

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

Input file:

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

Output:

ST
ST
ST
ST
ST

You're overwriting the file each time you open it. Move the with line outside of the for block, and seek to the end before writing (or open in append mode).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM