Python readlines() 并将每行数据附加输出为一行

2 投票
2 回答
39467 浏览
提问于 2025-04-17 20:33

我有一个csv文件,大概有3行,内容像这样:

Dallas
Houston
Ft. Worth

我想做的是把这些内容读进来,然后把它们变成链接,但希望所有的内容都输出在一行上。比如,输出的结果应该像这样:

<a href="/dallas/">Dallas</a> <a href="/houston/">Houston</a> <a href="/ft-worth/">Ft. Worth</a>

这是我目前写的代码,它能读取csv文件并输出内容,但它会把内容分成不同的行,而我只想要一行,并且还需要把超链接的html代码加进去。

f_in = open("data_files/states/major_cities.csv",'r')
for line in f_in.readlines():
    f_out.write(line.split(",")[0]+"")
f_in.close()
f_out.close()

2 个回答

2

可以试试Python的CSV模块来处理CSV文件。

import csv
file_out = open('file.txt','w')
with open('example.csv','rb') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        col=row[0]
        str="<a href=/" + col.strip().lower()
        str+= "/>" + col + "</a> "
        file_out.write(str)
7

这是因为在 f_in.readlines() 中,每一行的末尾都有一个换行符。你可以在那个循环里加一句 print(repr(line)) 来看看。你需要做的是在写入 f_out 之前,把这个换行符去掉:

for line in f_in.readlines():      
    actual_line = line.rstrip('\n')

你的整个代码应该是这样的:

import re 

with open('data_files/states/major_cities.csv') as f_in:
    with open('output_file.csv', 'w') as f_out:
        for line in f_in:
            city = line.rstrip('\n')
            f_out.write('<a href="/{}/">{}</a>'.format(
                re.sub(r'\W+', '-', city.lower()), 
                city
            ))

使用 with 语句可以自动处理文件的关闭,所以你不需要最后那两行代码。

更新

正如 J.F. Sebastian 提到的,为了得到你想要的输出,还需要对城市名称进行 slugify 处理。

撰写回答