Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法写入文件_Python_Python 3.x - Fatal编程技术网

Python 无法写入文件

Python 无法写入文件,python,python-3.x,Python,Python 3.x,我有以下代码: import csv import operator import sys with open('countryInfo.csv','r', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile, delimiter='\t') result = sorted(reader, key = lambda d: float(d['population']),reverse = True) #

我有以下代码:

import csv
import operator
import sys

with open('countryInfo.csv','r', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile, delimiter='\t')
    result = sorted(reader, key = lambda d: float(d['population']),reverse = True)
 #   for row in result:
 #       print(row)
 #   for row in result:
 #      print(row['name'], row['capital'], row['population'])
writer = csv.DictWriter(open('country_simple_info.csv', 'w', encoding='utf-8'), reader.fieldnames)
#with open("country_simple_info.csv", "w", encoding='utf-8') as csvoutfile:
writer.writeheader()
writer.writerows(result)
该代码的目标是编写一个程序,打开一个
countryInfo.csv
文件,从每一行中提取国家
name
capital
城市和
population
,然后用
country
写入一个名为
country\u simple\u info.csv
的新文件,
capital
population
在每行中,行按
population
大小排序,第一个最大。该文件包含包含其他信息的列,如
大陆
语言
等,但代码应忽略这些信息。在上面的代码中,当我取消注释
print
语句时,代码可以打印预期的输出,格式如下:

country,capital,population 
China,Beijing,1330044000
India,New Delhi,1173108018
United States,Washington,310232863
.......
但是,我无法写入该文件。有什么想法吗?而且,我不允许使用熊猫

with open('country_simple_info.csv', 'w', encoding='utf-8') as outputFile:
    writer = csv.DictWriter(outputFile, reader.fieldnames)
    writer.writeheader()
    writer.writerows(result)
使用“with open”语句将强制outputFile在超出范围时关闭,从而保存写入其中的文本


希望这能有所帮助。

在末尾添加一行writer.save(),然后查看文件是否会显示。首先,为什么不使用输出文件的
with
语句,就像输入文件那样?这意味着不关闭或刷新文件,这通常是一件坏事。其次,为什么要对输出CSV使用
reader.fieldnames
?如果您只需要3个字段,则无法传递8个(或其他)字段的列表,只能传递这3个字段。否则,一旦你开始工作,你只会得到一个原始CSV的排序副本,包含所有相同的列。最后,这里的实际问题是什么?“我无法写入文件”是什么意思?你有例外吗?一个空文件?非空但不正确的文件?程序运行后,在资源管理器中根本找不到该文件?或者…?我通常会得到一个空文件。当我运行代码时,在writer.writerow(结果)文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/csv.py”中的第14行,writerow返回self.writer.writerow(self.\u dict\u to\u list(rowdict))文件中的第155行,显示文件“15.py”“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/csv.py”,第148行,在_dict_to_list error_fields=rowdict.keys()-self.fieldnames AttributeError:“list”对象没有属性“keys”