我有一个包含以下列的csv文件:
ID,姓名,年龄,性别
其次是上面列的很多值.我试图单独读取列名称并将它们放在列表中.
我正在使用Dictreader,这给出了正确的细节:
with open('details.csv') as csvfile:
i=["name","age","sex"]
re=csv.DictReader(csvfile)
for row in re:
for x in i:
print row[x]
Run Code Online (Sandbox Code Playgroud)
但我想要做的是,我需要列表列表(在上面的例子中为"i")用输入csv自动解析,而不是在列表中硬编码.
with open('details.csv') as csvfile:
rows=iter(csv.reader(csvfile)).next()
header=rows[1:]
re=csv.DictReader(csvfile)
for row in re:
print row
for x in header:
print row[x]
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误
Keyerrror:'name'
Run Code Online (Sandbox Code Playgroud)
在行打印行[x].我哪里错了?是否可以使用Dictreader获取列名?请帮助.感谢致敬.
我在递归中遇到了这个问题.我无法弄清楚它是如何工作的.我理解递归的基础知识但这完全让我感到困惑.请帮忙.
main() {
foo(3);
}
void foo(int x) {
if (x >= 1) {
foo(--x);
printf("%d", x);
foo(--x);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个程序不打印任何东西,但它打印0120.
是不是第一次调用foo( - 3)即foo(2)跳转到函数的开头并重复直到3递减到0?
请解释这是如何工作的.
我是一个初学者,试图理解这个无辜的C函数:给定两个数字x和y,这个函数计算x提升到y的幂.
/* Function to calculate x raised to the power y */
int power(int x, unsigned int y)
{
if( y == 0)
return 1;
else if (y%2 == 0)
return power(x, y/2)*power(x, y/2); //what's happening here?
else
return x*power(x, y/2)*power(x, y/2);
}
Run Code Online (Sandbox Code Playgroud)
我正在努力追踪它们将两个函数的返回值相乘的部分.假设我将4和3作为x和y传递,我的函数跳转到第二个其他部分.然后我回到4*(power(4,1)*power(4,1))
我的理解,下一个调用是4*power(4,0)*power(4*0)
,因为y == 0返回1,它应该是4*1*1,我想要4*4*4.我在这里遗漏了一些东西.这个算法到底在做什么?
这个函数背后的逻辑是乘以x,y倍.任何人都可以告诉我这个简单的除法运算(或分而治之)如何实现逻辑?提前致谢.
我有一个set multimap,它存储了一个月的一些字符串(整数).
MonthlyCount = {1:["hello"],2:["hello","hi"]}
Run Code Online (Sandbox Code Playgroud)
我有一个地图,计算每月的字符串数量并添加它们.我使用containsKey过滤器来检查密钥是否存在于集合中,并将它们添加到地图中.
final String[] months = new DateFormatSymbols().getShortMonths();
final Map<String, Object> metaData = new LinkedHashMap<>();
private SetMultimap<Integer, String> MonthlyCount;
for (int i = 0; i <= month; i++) {
final int count = MonthlyCount.containsKey(i + 1) ? MonthlyCount.get(i + 1).size() : 0;
metaData.put(months[i], count);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用Java8的流和过滤器实现相同的行为?
我有一个写入文件的现有Java类.
public final class WriteToFile{
private Writer file_writer;
private static final String encoding_format = "UTF8";
private FileWrite(final File fpath) throws IOException {
this.file_writer = new OutputStreamWriter(new FileOutputStream(fpath), encoding_format);
}
@Override
public void fileWrite(final String msg) {
try {
this.file_writer.write(msg);
this.file_writer.write("\n");
this.file_writer.flush();
this.file_writer.close();
} catch (IOException e) {
log.error("File write failed", e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了对此进行单元测试,我了解到使用Mocking框架创建文件模拟并不是一个好习惯.我在这里测试什么?测试这个的唯一方法是再次执行文件写入,并检查预期内容和实际内容是否相同.在这种情况下,以JUnit方式执行此操作将如本文中提到的如何在Java中测试写入文件?.但是,我不打算重写文件编写代码,以包含接口包装器.我该如何解决这个问题?
@Test public void testfileWrite() {
String msg = "somemessage";
String fpath = "path/to/file";
Writer file_writer = new OutputStreamWriter(new FileOutputStream(fpath), "UTF8");
file_writer.write(msg);
assertEquals("somemessage", file_writer.toString()); …
Run Code Online (Sandbox Code Playgroud) c ×2
java ×2
recursion ×2
guava ×1
java-8 ×1
java-stream ×1
junit ×1
python ×1
unit-testing ×1