鱼C论坛

 找回密码
 立即注册
楼主: 凊风

[已解决]资产管理系统求教~~

  [复制链接]
 楼主| 发表于 2024-5-13 22:38:38 | 显示全部楼层
FishC 发表于 2024-5-13 22:29
可以使用`pandas`库来读取文本文件,并将数据存入Excel文件中。下面是示例代码:

如何查询程序执行的时间呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-13 22:39:55 | 显示全部楼层
凊风 发表于 2024-05-13 22:38
如何查询程序执行的时间呢?


在Python中,我们可以使用`time`模块来查询程序的执行时间。具体步骤如下:
import time

# 记录程序开始执行的时间
start_time = time.time()

# 执行你的代码任务
# ...

# 记录程序结束执行的时间
end_time = time.time()

# 计算程序的执行时间
execution_time = end_time - start_time

# 打印执行时间
print("程序执行时间为:", execution_time, "秒")

在上面的代码中,我们首先使用`time.time()`函数获取当前的时间戳作为程序开始执行的时间。然后,在代码任务执行完毕后,再次使用`time.time()`函数获取当前时间戳作为程序结束执行的时间。最后,通过计算两者之差,得到程序的执行时间,并将其打印出来。

请注意,这里计算的是程序从开始执行到结束执行的整体时间,并非针对特定部分的执行时间。如果你想要计算某个特定部分的执行时间,可以在该部分的开始和结束处分别记录时间并做相应的计算。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-13 22:49:33 | 显示全部楼层
FishC 发表于 2024-5-13 22:29
可以使用`pandas`库来读取文本文件,并将数据存入Excel文件中。下面是示例代码:

执行后,只把“名称”这一列的内容写到了“区划代码”列中,

“级别”和“区划代码”这两列对应内容没写入E:\temp\123.xlsx中。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-13 22:49:55 | 显示全部楼层
凊风 发表于 2024-05-13 22:49
执行后,只把“名称”这一列的内容写到了“区划代码” ...


抱歉,我之前提供的代码有误。

可以使用pandas库的`read_csv`函数来读取文本文件,并使用`to_excel`函数将数据存入Excel文件中,具体示例如下:
import pandas as pd

data = pd.read_csv('123.txt', delimiter='\t')
data.to_excel('E:\\temp\\123.xlsx', index=False)

在这个示例代码中,我们使用`read_csv`函数读取文本文件,并指定了制表符`\t`作为分隔符。然后,使用`to_excel`函数将数据存入Excel文件,通过`index=False`参数来禁止写入索引列。

这样,就能够将整个数据表格一起存入Excel文件中,包括“级别”、“区划代码”和“名称”三列的内容。请注意,文件路径需要根据实际情况进行调整,确保路径的正确性。

希望这次的回答能够解决您的问题!如果还有其他疑问,请随时提出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 08:54:17 | 显示全部楼层
FishC 发表于 2024-5-13 22:49
抱歉,我之前提供的代码有误。

可以使用pandas库的`read_csv`函数来读取文本文件,并使用`to_excel` ...

现有123.txt内容如下:
级别     区划代码              名称
1        110000000000        北京市
2        110100000000        市辖区
3        110101000000        东城区
4        110101001000        东华门街道
5        110101001001        多福巷社区居委会
5        110101001002        银闸社区居委会
5        110101001005        东厂社区居委会
5        110101001006        智德社区居委会
5        110101001007        南池子社区居委会
5        110101001009        灯市口社区居委会
5        110101001010        正义路社区居委会
5        110101001013        台基厂社区居委会
5        110101001014        韶九社区居委会
5        110101001015        王府井社区居委会
4        110101002000        景山街道

请问能不能逐条读取并存入E:\Temp\123.xlsx中,列名就是“级别”、‘区划代码’和“名称”。
要求三列的内容都要一对应写入E:\Temp\123.xlsx中,而不是只写入一列。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 08:54:28 | 显示全部楼层
凊风 发表于 2024-05-14 08:54
现有123.txt内容如下:
级别     区划代码           ...


当使用`pandas`库的`read_csv`函数读取文本文件时,默认情况下会将第一行作为列名。但是在你提供的文本文件中,第一行并不是真正的列名,而是数据。

为了解决这个问题,我们可以设置`read_csv`函数的`header`参数为`None`,然后手动指定列名。以下是修改后的示例代码:
import pandas as pd

# 读取文本文件,并手动指定列名
df = pd.read_csv('E:\Temp\123.txt', sep='\s+', header=None, names=['级别', '区划代码', '名称'])

# 将数据写入Excel文件
df.to_excel('E:\Temp\123.xlsx', index=False)

通过以上代码,将逐条读取文本并存入`E:\Temp\123.xlsx`中,确保列名和对应内容都正确写入。请注意,需要将文件路径使用原始字符串(以`r`开头),或者使用双反斜杠`\\`进行转义。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 08:57:02 | 显示全部楼层
FishC 发表于 2024-5-14 08:54
当使用`pandas`库的`read_csv`函数读取文本文件时,默认情况下会将第一行作为列名。但是在你提供的文本 ...

运行后没有创建E:\Temp\123.xlsx,程序执行时间为: 0.2172377109527588 秒.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 08:58:15 | 显示全部楼层
凊风 发表于 2024-05-14 08:57
运行后没有创建E:\Temp\123.xlsx,程序执行时间为: 0 ...


抱歉,我之前提供的代码有误。请确保你使用`pandas`库和`openpyxl`库,并参考以下示例代码:
import pandas as pd

# 读取文本文件
df = pd.read_csv('E:/Temp/123.txt', sep='\s+', encoding='utf-8')

# 创建Excel Writer对象
writer = pd.ExcelWriter('E:/Temp/123.xlsx', engine='openpyxl')

# 将数据写入Excel文件
df.to_excel(writer, index=False)

# 保存并关闭Excel文件
writer.save()
writer.close()

这里使用了`read_csv`函数读取文本文件,`sep='\s+'`参数表示使用空格作为分隔符,`encoding='utf-8'`参数用于指定文件编码方式。然后,使用`to_excel`方法将数据写入Excel文件。最后,使用`save`方法保存并关闭Excel文件。

请确保文件路径及名称正确无误,如果不存在指定路径的文件夹,请先创建对应的文件夹。运行时建议使用管理员权限运行,以确保对指定路径的写权限。

希望这次能够成功创建Excel文件,并正确保存数据。如果还有问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 09:05:06 | 显示全部楼层
FishC 发表于 2024-5-14 08:58
抱歉,我之前提供的代码有误。请确保你使用`pandas`库和`openpyxl`库,并参考以下示例代码:

这次能够正确读取和写入了。
只是,“区划代码”列变成了科学计数法,能让“区划代码”列不用科学计数法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 09:05:16 | 显示全部楼层
凊风 发表于 2024-05-14 09:05
这次能够正确读取和写入了。
只是,“区划代码”列变 ...


当Excel中的数据超过一定范围时,会自动使用科学计数法来显示数据。如果你不希望“区划代码”列使用科学计数法,可以使用`openpyxl`库来设置单元格的格式。以下是修改后的代码:
import pandas as pd
from openpyxl import Workbook

# 读取文本文件
df = pd.read_csv('123.txt', sep='\s+', dtype=str)

# 创建Excel文件
wb = Workbook()
ws = wb.active

# 将DataFrame中的数据逐行写入Excel文件
for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

# 设置“区划代码”列的格式为文本格式
column = ws['B']
for cell in column:
    cell.number_format = '0'

# 保存Excel文件
wb.save('E:/Temp/123.xlsx')

在上述代码中,我们使用`openpyxl`库中的`Workbook`和`number_format`属性来设置单元格的格式为文本格式,从而避免科学计数法的显示。注意,在修改了单元格格式后,需要重新保存Excel文件。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 09:10:38 | 显示全部楼层
FishC 发表于 2024-5-14 09:05
当Excel中的数据超过一定范围时,会自动使用科学计数法来显示数据。如果你不希望“区划代码”列使用科 ...

Traceback (most recent call last):
  File "E:\Temp\Txt-to-xlsx.py", line 17, in <module>
    for r in dataframe_to_rows(df, index=False, header=True):
             ^^^^^^^^^^^^^^^^^
NameError: name 'dataframe_to_rows' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 09:10:48 | 显示全部楼层
凊风 发表于 2024-05-14 09:10
Traceback (most recent call last):
  File "E:\Tem ...


抱歉,我在之前的回答中遗漏了一部分代码。请确保你已经导入了正确的库 `openpyxl.utils.dataframe`。以下是修改后的代码:
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# 读取文本文件
df = pd.read_csv('E:\Temp\input.txt', sep='\t', encoding='utf-8')

# 创建Excel工作簿
wb = Workbook()
ws = wb.active

# 将DataFrame数据写入Excel工作表
for r in dataframe_to_rows(df, index=False, header=True):
    ws.append(r)

# 设置“区划代码”列的格式为文本
column = ws['A']
for cell in column:
    cell.number_format = '@'

# 保存Excel文件
wb.save('E:\Temp\output.xlsx')

这样,“区划代码”列的数据将会以文本形式保存,不再使用科学计数法显示。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 11:04:56 | 显示全部楼层
FishC 发表于 2024-5-14 09:10
抱歉,我在之前的回答中遗漏了一部分代码。请确保你已经导入了正确的库 `openpyxl.utils.dataframe`。 ...

请问data_model = pd.read_excel(self.Region_file)这句代码中。
能否指定只读取self.Region_file中级别=2的数据?
每次都是全部读取,实在是太耗PC资源了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 11:05:03 | 显示全部楼层
凊风 发表于 2024-05-14 11:04
请问data_model = pd.read_excel(self.Region_file)这 ...


可以使用 Pandas 的功能来筛选指定条件的数据。假设 `self.Region_file` 中有一个名为 `级别` 的列,你可以这样修改代码:
data_model = pd.read_excel(self.Region_file)
filtered_data = data_model[data_model['级别'] == 2]

这段代码会将 `self.Region_file` 中 `级别` 列的值等于2的数据筛选出来,存储在 `filtered_data` 变量中。你可以根据需要对 `filtered_data` 进行进一步的处理。这样就只会读取符合条件的数据,节省了计算机资源。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 14:39:51 | 显示全部楼层
FishC 发表于 2024-5-14 11:05
可以使用 Pandas 的功能来筛选指定条件的数据。假设 `self.Region_file` 中有一个名为 `级别` 的列,你 ...

能否根据所读取数据的多少来决定进度条的滚动时间呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 14:40:07 | 显示全部楼层
凊风 发表于 2024-05-14 14:39
能否根据所读取数据的多少来决定进度条的滚动时间呢?


当然可以!你可以使用 `tqdm` 这个库来添加一个进度条,根据数据的总数来决定滚动时间。以下是一个示例代码:
import pandas as pd
from tqdm import tqdm

data = pd.read_excel('your_file.xlsx')
total_rows = len(data)

# 使用 tqdm 创建一个进度条,设置 total 参数为数据的总行数
progress_bar = tqdm(total=total_rows)

for index, row in data.iterrows():
    # 在处理每一行数据之前更新进度条
    progress_bar.update(1)
  
    # 处理每一行数据的逻辑
    # ...
    
progress_bar.close()

上述代码中,我们首先获取数据的总行数,并将其传递给 `tqdm` 的 `total` 参数。然后在每一次循环开始时,调用 `progress_bar.update(1)` 来更新进度条的进度。接下来,你可以在循环中添加具体的数据处理逻辑。最后,循环结束后关闭进度条。

这样,进度条将根据数据的总行数来自动计算滚动时间,使你能够更好地了解当前的处理进度。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 15:06:27 | 显示全部楼层
FishC 发表于 2024-5-14 14:40
当然可以!你可以使用 `tqdm` 这个库来添加一个进度条,根据数据的总数来决定滚动时间。以下是一个示例 ...

我现有的进度条是这样的:
###进度条式样
    def start_progress_bar(self):
        self.progressBar.setValue(0)
        self.progressBar.show()
        self.progressBar.setFixedSize(1200, 30)
        self.progressBar.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.progressBar.setTextVisible(True)
        self.progressBar.setStyleSheet("""
                                        QProgressBar {
                                            text-align: center;  /* 将文本居中对齐 */
                                            color: white;  /* 设置文本颜色为白色 */               
                                            border: none;
                                            background-color: #909090;  /* 设置背景色 */
                                            height: 20px;  /* 设置进度条高度 */
                                        }
                                        QProgressBar::chunk {
                                            background-color: #00A3E0;  /* 设置进度条颜色 */
                                        }
                                        """)
        self.timer = self.startTimer(100)

    def timerEvent(self, event):
        value = self.progressBar.value() + 2
        if value > 100:
            self.stop_progress_bar()
        else:
            self.progressBar.setValue(value)

    def stop_progress_bar(self):
        self.killTimer(self.timer)
        self.progressBar.hide()
        time.sleep(0.5)

能不能把调用此进度条时所读取数据的多少,做为一个参数传递给进度条,从而决定进度条的滚动时间?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 15:08:09 | 显示全部楼层
凊风 发表于 2024-05-14 15:06
我现有的进度条是这样的:
###进度条式样
    def s ...


当然可以!你可以将所读取的数据数量作为参数传递给进度条,然后根据数据数量来决定进度条的滚动时间。以下是一个修改后的示例代码:
def start_progress_bar(self, data_size):
    self.progressBar.setValue(0)
    self.progressBar.show()
    self.progressBar.setFixedSize(1200, 30)
    self.progressBar.setAlignment(Qt.AlignmentFlag.AlignCenter)
    self.progressBar.setTextVisible(True)
    self.progressBar.setStyleSheet("""
                                    QProgressBar {
                                        text-align: center;  /* 将文本居中对齐 */
                                        color: white;  /* 设置文本颜色为白色 */                
                                        border: none;
                                        background-color: #909090;  /* 设置背景色 */
                                        height: 20px;  /* 设置进度条高度 */
                                    }
                                    QProgressBar::chunk {
                                        background-color: #00A3E0;  /* 设置进度条颜色 */
                                    }
                                    """)

    self.progress_step = 100 / data_size
    self.current_progress = 0

    self.timer = self.startTimer(100)

def timerEvent(self, event):
    self.current_progress += self.progress_step
    if self.current_progress > 100:
        self.stop_progress_bar()
    else:
        self.progressBar.setValue(self.current_progress)

def stop_progress_bar(self):
    self.killTimer(self.timer)
    self.progressBar.hide()
    time.sleep(0.5)

在调用 `start_progress_bar` 方法时,将所读取的数据数量作为参数传递给它,然后在 `timerEvent` 方法中根据数据数量计算进度条每次滚动的步长,并更新当前的进度值。这样,进度条的滚动时间将根据数据的多少而动态调整。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-14 15:17:42 | 显示全部楼层
FishC 发表于 2024-5-14 15:08
当然可以!你可以将所读取的数据数量作为参数传递给进度条,然后根据数据数量来决定进度条的滚动时间。 ...

请问self.comboBox的字体颜色怎么设置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 15:17:48 | 显示全部楼层
凊风 发表于 2024-05-14 15:17
请问self.comboBox的字体颜色怎么设置?


你可以使用QComboBox的`setStyleSheet()`方法来设置字体颜色。下面是一个示例:
self.comboBox.setStyleSheet("color: red;")

这样就会将self.comboBox的字体颜色设置为红色。你可以根据需要调整颜色值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 05:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表