怎么使用python socket以流式形式一行行发送csv文件中的数据,并且传输后写入csv文件
时间: 2023-08-01 15:08:31 浏览: 133
要以流式形式一行行发送 CSV 文件中的数据,并在接收端将其写入 CSV 文件,你可以使用 Python 的 Socket 模块和 CSV 模块。以下是一个示例代码,演示了如何实现:
发送端(client)代码:
```python
import socket
import csv
# 创建 Socket 连接
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 12345)
client_socket.connect(server_address)
# 打开 CSV 文件
with open('data.csv', 'r') as file:
csv_reader = csv.reader(file)
# 逐行发送数据
for row in csv_reader:
# 将行数据转换为字符串,并添加换行符
data = ','.join(row) + '\n'
# 发送数据
client_socket.sendall(data.encode())
# 发送完成的标识
client_socket.sendall('EOF'.encode())
# 关闭连接
client_socket.close()
```
接收端(server)代码:
```python
import socket
import csv
# 创建 Socket 连接
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 12345)
server_socket.bind(server_address)
server_socket.listen(1)
# 等待客户端连接
print('等待客户端连接...')
client_socket, client_address = server_socket.accept()
print('客户端已连接:', client_address)
# 接收数据并写入 CSV 文件
with open('received_data.csv', 'w') as file:
csv_writer = csv.writer(file)
while True:
# 接收数据
data = client_socket.recv(4096).decode()
# 判断是否接收完成
if data == 'EOF':
break
# 解析数据,并写入 CSV 文件
row = data.strip().split(',')
csv_writer.writerow(row)
# 关闭连接
client_socket.close()
server_socket.close()
```
上述代码中,发送端逐行读取 CSV 文件,并将每一行数据转换为字符串后发送给接收端。接收端接收数据后,解析并将其写入到新的 CSV 文件中。
确保发送端和接收端的代码在相同的网络环境中运行,并使用相同的 IP 地址和端口号。此外,确保发送端能够找到正确的 CSV 文件路径,接收端会将数据写入名为 `received_data.csv` 的文件中。
希望这个示例能满足你的需求!如果你有任何进一步的问题,请随时提问。
阅读全文