如何使用csv文件中的数据写入txt文件中的行
我该怎么告诉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()
可以让你用一个分隔符把一系列字符串连接起来。