如何使用csv文件中的数据写入txt文件中的行

0 投票
2 回答
817 浏览
提问于 2025-04-18 12:28

我该怎么告诉Python打开一个CSV文件,并把每行的所有列合并成新的行,写入一个新的TXT文件呢?

让我来解释一下:

我正在尝试从一个网站下载一堆会员资料,用于一个研究项目。为此,我想把所有的URL写进一个TXT文件里。

这些URL大概是这样的:website.com-名字-国家-标题-id.html

我写了一个脚本,把每个会员的这些信息(名字/国家/标题/id)保存到一个CSV文件里,格式是这样的:

mark    japan    rookie    married
john    sweden   expert    single
suzy    germany    rookie    married
etc...

现在我想打开这个CSV文件,并写一个TXT文件,里面的行应该像这样:

www.website.com/mark-japan-rookie-married.html
www.website.com/john-sweden-expert-single.html
www.website.com/suzy-germany-rookie-married.html
etc...

这是我目前写的代码。你们可能能看出来我几乎不知道自己在做什么,所以非常感谢任何帮助!!!

import csv
x = "http://website.com/"
y = ".html"

csvFile=csv.DictReader(open("NameCountryTitleId.csv")) #This file is stored on my computer
file = open("urls.txt", "wb")

for row in csvFile:
    strArgument=str(row['name'])+"-"+str(row['country'])+"-"+str(row['title'])+"-"+str(row['id'])
    try:
        file.write(x + strArgument + y)
    except:
        print(strArgument)

file.close()

运行这个代码后,我没有收到任何错误信息,但生成的TXT文件是完全空的。

2 个回答

-1

其实这很简单,你现在在处理字符串,但你打开的文件是以字节模式写入的,所以每次写入都失败,结果就会在屏幕上显示错误信息。试试把这一行:

file = open("urls.txt", "wb")

改成这样:

file = open("urls.txt", "w")

编辑: 我之前说错了,不过我想指出,如果没有换行符或者其他分隔符,你打算怎么在后面使用这些网址呢?如果在每个网址之间加上换行符,那就容易提取了。

1

与其使用 DictReader,不如用普通的读取器,这样在连接行的时候会更简单:

import csv

url_format = "http://website.com/{}.html"
csv_file = 'NameCountryTitleId.csv'
urls_file = 'urls.txt'

with open(csv_file, 'rb') as infh, open(urls_file, 'w') as outfh:
    reader = csv.reader(infh)
    for row in reader:
        url = url_format.format('-'.join(row))
        outfh.write(url + '\n')

使用 with 语句可以确保在代码执行完后,文件会被正确关闭。

我做的进一步修改:

  • 在 Python 2 中,打开 CSV 文件时要用二进制模式,因为 csv 模块会自己处理换行符,因为正确格式的列数据中可能会包含换行符。
  • 不过,普通的文本文件还是应该用文本模式打开。
  • 写入文件时,记得加上换行符,以便区分每一行。
  • 使用字符串格式化(str.format())比用字符串拼接要灵活得多。
  • str.join() 可以让你用一个分隔符把一系列字符串连接起来。

撰写回答