我有多个文件的文件夹。这就是组织的方式。
import csv
from collections import defaultdict
neighbours = defaultdict(set)
with open('input.csv') as f:
reader = csv.DictReader(f)
for row in reader:
neighbours[row['source']].add(row['neighbour'])
neighbours[row['neighbour']].add(row['source'])
with open('output.csv', 'w') as f:
writer = csv.writer(f)
# Write the header
writer.writerow(['source', 'neighbours'])
# Write the data
for key, values in neighbours.items():
writer.writerow([key, ','.join(values)])
我必须打开每个文件夹,读取每个文件,然后对每个文件夹的所有文件执行一些计算并显示结果,然后移动到下一个文件夹并对这些文件夹的文件执行相同的计算。以下是我的代码。还有其他更简单的方法吗?我的代码非常慢,有时甚至无法正常工作。
Folder_1
- Folder_1_File_1
- Folder_1_File_2
- Folder_1_File_3
- Folder_1_File_4
...
Folder_2
- Folder_2_File_1
- Folder_2_File_2
- Folder_2_File_3
- Folder_2_File_4
...
Folder_3
- Folder_3_File_1
- Folder_3_File_2
- Folder_3_File_3
- Folder_3_File_4
...
答案 0 :(得分:4)
Java 8引入了基于访问者的Files.walkFileTree()
api,它更容易掌握:
File file = new File("/base/folder");
Files.walkFileTree(file.toPath(), new SimpleFileVisitor<>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
// do your thing here
return FileVisitResult.CONTINUE;
}
});
答案 1 :(得分:1)
此代码将首先为您提供常规文件(而不是文件夹),以及给定路径树的其余部分。
public class ReadRecurssivelyFromFolder {
public static void main(String[] args) {
try {
Files.walk(Paths.get("/home/rafik/test" ))
.filter(Files::isRegularFile)
.forEach(System.out::println);
} catch (IOException ex) {
Logger.getLogger(ReadRecurssivelyFromFolder.class.getName()).log(Level.SEVERE, null, ex);
}
}
输出:
然后,您可以根据给定的路径执行计算。