【问题标题】:Python readlines() and append data to each line output to one linePython readlines() 并将数据附加到每一行输出到一行
【发布时间】:2014-04-03 21:01:30
【问题描述】:

我有一个包含 3 行的 csv 文件,如下所示:

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

【问题讨论】:

标签: python csv readlines


【解决方案1】:

这是因为f_in.readlines() 中的每个line 都在末尾附加了一个换行符。 (尝试在该循环中添加print(repr(line)))。您需要做的是在 writef_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 语句负责处理 closeing 文件,因此您不需要最后两行。

更新

正如 J.F. Sebastian 指出的那样,还需要 slugify 城市名称来实现您想要的输出。

【讨论】:

  • 城市名称:re.sub(r"\W+", "-", city.lower())cgi.escape(s, quote=True) 也可能有助于避免损坏的 html。
  • 完美的家伙,谢谢。这对我来说效果很好。感谢您的帮助。
【解决方案2】:

尝试使用 python CSV module 处理 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)

【讨论】:

  • 你是对的,但如果你要提出一个完全不同的方法,你应该花更多的精力来回答 OP 的具体问题。在这种情况下,读取 CSV 不是问题。后来它在操纵它。
猜你喜欢
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2019-10-22
  • 2011-06-29
相关资源
最近更新 更多