Python 如何使用csv文件中的数据在txt文件中写入行
如何告诉Python打开一个CSV文件,并将每行的所有列合并到一个新TXT文件中的新行中 解释: 我正试图从一个网站上下载一些会员资料,用于一个研究项目。为此,我想在一个TXT文件中列出所有URL URL类似于:website.com-name-country-title-id.html 我编写了一个脚本,为每个成员获取所有这些信息,并将它们保存在CSV文件的列(名称/国家/标题/id)中,如下所示:Python 如何使用csv文件中的数据在txt文件中写入行,python,python-2.7,csv,Python,Python 2.7,Csv,如何告诉Python打开一个CSV文件,并将每行的所有列合并到一个新TXT文件中的新行中 解释: 我正试图从一个网站上下载一些会员资料,用于一个研究项目。为此,我想在一个TXT文件中列出所有URL URL类似于:website.com-name-country-title-id.html 我编写了一个脚本,为每个成员获取所有这些信息,并将它们保存在CSV文件的列(名称/国家/标题/id)中,如下所示: mark japan rookie married john swed
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文件完全为空。与其使用
读写器,不如使用常规读写器,以便更轻松地加入行:
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
语句确保在代码完成时再次正确关闭文件
我所作的进一步修改:
- 在Python2中,以二进制模式打开CSV文件,
CSV
模块本身处理行尾,因为正确引用的列数据中可以嵌入换行符
- 常规文本文件仍应以文本模式打开
- 在文件中写入行时,请记住添加换行符以描绘行
- 使用字符串格式(
str.format()
)比使用字符串连接灵活得多
str.join()
这其实很简单,您正在处理字符串,但您打开要写入的文件是以字节模式打开的,因此每次写入失败时,它都会打印到屏幕上。尝试更改此行:
file = open("urls.txt", "wb")
为此:
file = open("urls.txt", "w")
编辑:
我的观点是正确的,但是我想指出,由于没有换行符或其他形式的分隔符,您打算以后如何使用URL?如果在每个URL之间添加换行符,它们将很容易恢复代码中没有任何内容表明文件无法写入。也许它是在一个不同的地方写的,和你期望的不同?是的,你是对的,它是在一个不同的地方写的。但是你的方式更好,所以谢谢!在Python2中,唯一的区别是将换行符转换为平台本机行分隔符。OP甚至没有写新行,当然也不会引发例外。