编写一个程序,可以在命令行输入参数,完成指定文件的压缩解压 命令行参数如下 rle file1 –c(-d) file2 第一个参数为可执行程序名称,第二个参数为原始文件名,第三个参数为压缩或解压缩选项,第四个参数为新文件名
时间: 2024-02-03 19:14:59 浏览: 13
以下是Python代码实现:
```python
import sys
# Run-length encoding function
def compress(data):
count = 1
compressed = ""
for i in range(1, len(data)):
if data[i] != data[i-1]:
compressed += str(count) + data[i-1]
count = 1
else:
count += 1
compressed += str(count) + data[-1]
return compressed
# Run-length decoding function
def decompress(data):
decompressed = ""
i = 0
while i < len(data):
count = int(data[i])
char = data[i+1]
decompressed += count * char
i += 2
return decompressed
# Check command line arguments
if len(sys.argv) != 5:
print("Usage: rle <file1> -c(-d) <file2>")
sys.exit()
# Read file1
filename1 = sys.argv[1]
try:
with open(filename1, "r") as f:
data = f.read()
except FileNotFoundError:
print("File not found:", filename1)
sys.exit()
# Compress or decompress data
option = sys.argv[3]
if option == "-c":
compressed_data = compress(data)
output_filename = sys.argv[4]
with open(output_filename, "w") as f:
f.write(compressed_data)
print("File successfully compressed to", output_filename)
elif option == "-d":
decompressed_data = decompress(data)
output_filename = sys.argv[4]
with open(output_filename, "w") as f:
f.write(decompressed_data)
print("File successfully decompressed to", output_filename)
else:
print("Invalid option:", option)
sys.exit()
```
这个程序首先定义了一个运行长度编码和解码的函数 `compress` 和 `decompress`。然后,它检查命令行参数是否正确,并读取第一个文件。接着,根据第三个参数选择压缩或解压缩数据,并将结果写入新文件中。如果命令行参数不正确或文件不存在,则输出错误信息并退出程序。