gpt4 book ai didi

python - 模拟 CSV DictReader

转载 作者:行者123 更新时间:2023-11-28 22:40:43 25 4
gpt4 key购买 nike

有没有一种方法可以模拟 DictReader 进行单元测试,而无需实际编写文件然后重新打开它。

我的函数接受一个 DictReader 实例,所以我可以轻松地传递给它们一个来测试它们的功能,但似乎无法在不打开文件的情况下获得一个。

目前我正在手动编写一个 CSV 文件,然后在每次测试时将其删除。

class TestRowsStuff(unittest.TestCase):
def write_csv(self, path, iterable):
with open(path, 'wb') as f:
writer = csv.DictWriter(f, [PP, SN, TN])
writer.writeheader()
writer.writerows(iterable)

def setUp(self):
...
self.test_file = os.path.join('test.csv')
self.write_csv(self.test_file, test_values)

def tearDown(self):
os.remove(self.test_file)

最佳答案

您可以使用内存中的 StringIO 对象来存储/读取 Unicode/字符串:

In [10]: from StringIO import StringIO

In [11]: import csv

In [12]: csvfile = StringIO()

In [13]: csvfile.seek(0)

# sample taken from [here](https://docs.python.org/2/library/csv.html)
In [14]: fieldnames = ['first_name', 'last_name']

In [15]: writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

In [16]: writer.writeheader()

In [17]: writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})

In [18]: writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})

In [19]: writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

In [20]: csvfile.seek(0)

回读:

In [21]: csvfile.readlines()
Out[21]:
['first_name,last_name\r\n',
'Baked,Beans\r\n',
'Lovely,Spam\r\n',
'Wonderful,Spam\r\n']

如果你想使用内存缓冲区,你也可以使用 io.StringIO

关于python - 模拟 CSV DictReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com