2.编写一个程序,列出某个目录里所有子目录的名称,以及所有文件的名字和大小(以Kbyte为单位)。
时间: 2024-03-03 20:47:59 浏览: 48
以下是 Python 代码实现:
```python
import os
def get_size(path):
"""
获取文件大小
"""
size = os.path.getsize(path)
return size / 1024
def list_files(path):
"""
列出所有文件和子目录
"""
for root, dirs, files in os.walk(path):
for name in files:
file_path = os.path.join(root, name)
print(f"文件:{file_path},大小:{get_size(file_path)} KB")
for name in dirs:
dir_path = os.path.join(root, name)
print(f"目录:{dir_path}")
# 测试
list_files("/path/to/directory")
```
此代码会遍历指定目录下的所有文件和子目录,并输出文件名、大小和目录名。其中 `get_size` 函数用于获取文件大小,`list_files` 函数用于列出所有文件和子目录。
相关问题
使用c语言解析一个json文件,请提供c代码,尽量使用cjson库,请考虑json文件大小,尽量节省内存在10kbyte以内
以下是使用cjson库解析json文件的c代码,同时考虑了json文件大小和内存节省:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
#define BUFFER_SIZE 1024
int main(int argc, char* argv[])
{
FILE* json_file = fopen("example.json", "r");
if (!json_file) {
printf("Failed to open json file.\n");
return 1;
}
char buffer[BUFFER_SIZE];
memset(buffer, 0, BUFFER_SIZE);
size_t read_size = fread(buffer, 1, BUFFER_SIZE - 1, json_file);
if (ferror(json_file)) {
printf("Failed to read json file.\n");
fclose(json_file);
return 1;
}
cJSON* json_obj = cJSON_Parse(buffer);
if (!json_obj) {
printf("Failed to parse json file.\n");
fclose(json_file);
return 1;
}
// do something with json object
cJSON_Delete(json_obj);
fclose(json_file);
return 0;
}
```
说明:
1. 首先使用fopen打开json文件,如果失败则返回错误。
2. 为了节省内存,我们只读取了部分json文件(BUFFER_SIZE大小的字节数),并使用memset将buffer清零。
3. 使用fread读取json文件,如果失败则返回错误。
4. 使用cJSON_Parse将buffer解析为cJSON对象,如果失败则返回错误。
5. 在得到cJSON对象后,可以对其进行操作,这里省略。
6. 使用cJSON_Delete释放cJSON对象,关闭文件,返回。
注意事项:
1. 由于json文件可能含有敏感信息,因此不要自动记录用户输入的文件名,而是直接写死在代码中,避免被用户篡改。
2. 在读取json文件时,要考虑文件大小,不要一次性读取过多数据,导致内存占用过高。
3. 如果json文件大小超过了内存可以承受的范围,可以考虑将json文件分割为多个部分,分别解析。
node.js:编写一个程序从数组:3,8,7,-2,13,23,9,10,5,20,-21,15,20,-23,中找出第5致第7大的元素,并把这是个元素写入一个Buffer对象的缓冲区中,然后打印出该Buffer对象。最后打印出自己的姓名、学号。
要使用Node.js编写一个程序来完成这个任务,首先需要安装`buffer`模块,因为涉及到Buffer对象的操作。下面是实现这一功能的步骤:
1. 导入必要的模块:
```javascript
const http = require('http');
const buffer = require('buffer');
```
2. 定义输入数组并排序找到第5到第7大的元素:
```javascript
let arr = [3, 8, 7, -2, 13, 23, 9, 10, 5, 20, -21, 15, 20, -23];
arr.sort((a, b) => b - a); // 升序排列
let subArray = arr.slice(4, 8); // 获取第5至第7大元素
```
3. 创建Buffer并填充元素:
```javascript
let buff = new buffer.Buffer(subArray.length * buffer.kByte);
for (let i = 0; i < subArray.length; i++) {
buff.writeUInt8(subArray[i], i * buffer.kByte);
}
```
注意这里假设`buffer.kByte`是缓冲区的一个单位,实际可能是字节(byte)。
4. 打印Buffer对象:
```javascript
console.log(`Buffer content: ${buff.toString('utf8')}`);
```
5. 打印个人信息(如果有的话,这里仅作为示例,实际上可能需要替换为实际姓名和学号):
```javascript
console.log('Name:', 'Your Name'); // 替换为你的名字
console.log('Student ID:', '123456'); // 替换为你的真实学号
```
整合起来,完整的代码如下:
```javascript
const http = require('http');
const buffer = require('buffer');
// ... (其余步骤)
const buff = new buffer.Buffer(subArray.length * buffer.kByte);
for (let i = 0; i < subArray.length; i++) {
buff.writeUInt8(subArray[i], i * buffer.kByte);
}
console.log(`Buffer content: ${buff.toString('utf8')}`);
console.log('Name:', 'Your Name');
console.log('Student ID:', '123456');
```
记得替换上述代码中的`'Your Name'`和`'123456'`为你的实际信息。
阅读全文